select top 20 * from (
select moo.linkid,moo.mobile,moo.matchcode,mocontent,motime,moo.spcode,moo.stat,moo.state,moo.company,mt.linkid mtlinkid,mtcontent,mttime,mt.stat mtstat,RowNumber
from(
select linkid,mobile,mo.matchcode,mocontent,motime,spcode,stat,Province state,company,ROW_NUMBER() OVER (ORDER BY id) AS RowNumber
from t_jbxs_mo_log mo,t_mobile_zipcode mobi,t_jbxs_matchinfo matc
where substring(mo.mobile,0,8)=substring(mobi.Region,0,8) and matc.matchcode=mo.matchcode
) moo left join t_jbxs_mt_log mt on mt.linkid=moo.linkid
) result where RowNumber>(100-1)*20 ) resultOrder order by motime desc
这是我的sql语句,在查询分析器中一般都是2秒左右,在系统中有时候很快,有时候却很慢超时查不出数据来。不知道是怎么回事
43 个解决方案
#1
我了个去,这一条还真长啊
#2
]_[
#3
多写了两层没用的. 改为以下
select top 20 moo.linkid,moo.mobile,moo.matchcode,mocontent,motime,moo.spcode,moo.stat,moo.state,moo.company,mt.linkid mtlinkid,mtcontent,mttime,mt.stat mtstat,RowNumber
from(
select linkid,mobile,mo.matchcode,mocontent,motime,spcode,stat,Province state,company,ROW_NUMBER() OVER (ORDER BY id) AS RowNumber
from t_jbxs_mo_log mo,t_mobile_zipcode mobi,t_jbxs_matchinfo matc
where substring(mo.mobile,0,8)=substring(mobi.Region,0,8) and matc.matchcode=mo.matchcode
) moo left join t_jbxs_mt_log mt on mt.linkid=moo.linkid where RowNumber>(100-1)*20 ) resultOrder order by motime desc
select top 20 moo.linkid,moo.mobile,moo.matchcode,mocontent,motime,moo.spcode,moo.stat,moo.state,moo.company,mt.linkid mtlinkid,mtcontent,mttime,mt.stat mtstat,RowNumber
from(
select linkid,mobile,mo.matchcode,mocontent,motime,spcode,stat,Province state,company,ROW_NUMBER() OVER (ORDER BY id) AS RowNumber
from t_jbxs_mo_log mo,t_mobile_zipcode mobi,t_jbxs_matchinfo matc
where substring(mo.mobile,0,8)=substring(mobi.Region,0,8) and matc.matchcode=mo.matchcode
) moo left join t_jbxs_mt_log mt on mt.linkid=moo.linkid where RowNumber>(100-1)*20 ) resultOrder order by motime desc
#4
#5
3楼这样写查询的结果会出现重复,所以我才在外面包了一层
#6
#7
select * from(
select top 20 * from (
你这两层没法去重复呀..
#8
真够长的
#9
真够长的啊
#10
ROW_NUMBER() OVER (ORDER BY id) AS RowNumber 这个是我自动编的号,我放在最外面判断的,放到里面每次取的都是一样的所以会重复,你的sql语句我刚试过了,确实重复
#11
#12
最主要的是在系统中有时候查询很慢,出现超时数据显示不出来。有时候却是挺快的。我在服务器查询分析器中执行了下一直都是2秒左右,最高也不会超过三秒。我本地也没问题。
#13
用临时表试一下
#14
把你的这个sql语句写入存储过程吧。不要拼接sql在cs上。
#15
如果是我,我就让sql语句执行尽可能简单的功能,
把判断啥的放在程序里去执行,要不然总是这样,数据库受不了啊
把判断啥的放在程序里去执行,要不然总是这样,数据库受不了啊
#16
感觉大家好像没有把握住我问的问题,我想找出问什么时快时慢
#17
好逗啊!
#18
如果查询分析器的时间稳定在2秒左右,说明数据库端没有问题,sql 语句没有问题,问题出在其他地方,比如网络连接?
#19
Lock 了吧
#20
你应该去SQL版优化一下 。。
#21
使用SQL SERVER性能监视器,计算从该条sql传入sql到返回值后的时间
也可以发现时间究竟是花在执行上,还是其他方面
也可以发现时间究竟是花在执行上,还是其他方面
#22
的确
联表查条件还是substring(mo.mobile,0,8)=substring(mobi.Region,0,8)
#23
恩,就是要检查一下网络问题。
再说你说的时快时慢。能不能具体点。不然不好判断啊
#24
慢是在某一个时间段内显示一直在查询,最后超时什么也查不出来。有时候就一点查询就直接查询出来了。但是系统中其它地方的查询都能查询出来,所以应该跟网络没有关系
#25
把它建成视图再试试。
#26
数据量比较大。。建议使用存储过程,将查询的结果 放 临时表, 在 取临时表数据加条件判断。
#27
这个不知道怎么试好。是有时候快,有时候就慢查不出来。就像上个星期五下午就查不出来,今天我在查就很快可以查出来。已经出现好几次了
#28
该存储过程吧
这样执行的效率肯定 会慢的
至于你说的时快时慢
是因为数据量的 并发处理 时多时少
这样执行的效率肯定 会慢的
至于你说的时快时慢
是因为数据量的 并发处理 时多时少
#29
#30
有可能出现死锁的情况吗?应为在查不出来的时候感觉好像是假死的状态
#31
建设用临时表吧,这个脚本很容易出错的。数据量大的话又不查
#32
打个SP_WHO ,看看你用的几张表是不是被其他进程锁了,锁了就会很慢
建议用临时表。表名后加上 with (nolock)
建议用临时表。表名后加上 with (nolock)
#33
看了你的SQL语句,我意识到我的sql也很菜...
#34
顶一个!
#35
建议用临时表。表名后加上 with (nolock)
#36
看着这sql我就有点头大阿
#37
我也寫過自動增號的sql,用生成視圖的方法速度還可以,試一下吧
#38
监视实际执行计划,看看开销浪费在哪
#39
用存储过程试试吧 或者你把后面from的语句写成left join 语句 调用下?
#40
SELECT *
FROM
(SELECT top 20 *
FROM
(SELECT moo.linkid ,
moo.mobile ,
moo.matchcode ,
mocontent ,
motime ,
moo.spcode ,
moo.stat ,
moo.state ,
moo.company ,
mt.linkid mtlinkid,
mtcontent ,
mttime ,
mt.stat mtstat ,
RowNumber
FROM
(SELECT linkid ,
mobile ,
mo.matchcode ,
mocontent ,
motime ,
spcode ,
stat ,
Province state,
company ,
ROW_NUMBER() OVER (ORDER BY id) AS RowNumber
FROM t_jbxs_mo_log mo ,
t_mobile_zipcode mobi,
t_jbxs_matchinfo matc
WHERE substring(mo.mobile,0,8)=substring(mobi.Region,0,8)
AND matc.matchcode =mo.matchcode
) moo
LEFT JOIN t_jbxs_mt_log mt
ON mt.linkid=moo.linkid
) result
WHERE RowNumber>(100-1)*20
) resultOrder
ORDER BY motime DESC
帮楼主排了下版
#41
用不用存储过程,有什么影响?
#42
RowNumber>(100-1)*20
这个是固定的值么,如果是最好大于该值,不要用表达式在计算该值。
这个是固定的值么,如果是最好大于该值,不要用表达式在计算该值。
#1
我了个去,这一条还真长啊
#2
]_[
#3
多写了两层没用的. 改为以下
select top 20 moo.linkid,moo.mobile,moo.matchcode,mocontent,motime,moo.spcode,moo.stat,moo.state,moo.company,mt.linkid mtlinkid,mtcontent,mttime,mt.stat mtstat,RowNumber
from(
select linkid,mobile,mo.matchcode,mocontent,motime,spcode,stat,Province state,company,ROW_NUMBER() OVER (ORDER BY id) AS RowNumber
from t_jbxs_mo_log mo,t_mobile_zipcode mobi,t_jbxs_matchinfo matc
where substring(mo.mobile,0,8)=substring(mobi.Region,0,8) and matc.matchcode=mo.matchcode
) moo left join t_jbxs_mt_log mt on mt.linkid=moo.linkid where RowNumber>(100-1)*20 ) resultOrder order by motime desc
select top 20 moo.linkid,moo.mobile,moo.matchcode,mocontent,motime,moo.spcode,moo.stat,moo.state,moo.company,mt.linkid mtlinkid,mtcontent,mttime,mt.stat mtstat,RowNumber
from(
select linkid,mobile,mo.matchcode,mocontent,motime,spcode,stat,Province state,company,ROW_NUMBER() OVER (ORDER BY id) AS RowNumber
from t_jbxs_mo_log mo,t_mobile_zipcode mobi,t_jbxs_matchinfo matc
where substring(mo.mobile,0,8)=substring(mobi.Region,0,8) and matc.matchcode=mo.matchcode
) moo left join t_jbxs_mt_log mt on mt.linkid=moo.linkid where RowNumber>(100-1)*20 ) resultOrder order by motime desc
#4
#5
3楼这样写查询的结果会出现重复,所以我才在外面包了一层
#6
#7
select * from(
select top 20 * from (
你这两层没法去重复呀..
#8
真够长的
#9
真够长的啊
#10
ROW_NUMBER() OVER (ORDER BY id) AS RowNumber 这个是我自动编的号,我放在最外面判断的,放到里面每次取的都是一样的所以会重复,你的sql语句我刚试过了,确实重复
#11
#12
最主要的是在系统中有时候查询很慢,出现超时数据显示不出来。有时候却是挺快的。我在服务器查询分析器中执行了下一直都是2秒左右,最高也不会超过三秒。我本地也没问题。
#13
用临时表试一下
#14
把你的这个sql语句写入存储过程吧。不要拼接sql在cs上。
#15
如果是我,我就让sql语句执行尽可能简单的功能,
把判断啥的放在程序里去执行,要不然总是这样,数据库受不了啊
把判断啥的放在程序里去执行,要不然总是这样,数据库受不了啊
#16
感觉大家好像没有把握住我问的问题,我想找出问什么时快时慢
#17
好逗啊!
#18
如果查询分析器的时间稳定在2秒左右,说明数据库端没有问题,sql 语句没有问题,问题出在其他地方,比如网络连接?
#19
Lock 了吧
#20
你应该去SQL版优化一下 。。
#21
使用SQL SERVER性能监视器,计算从该条sql传入sql到返回值后的时间
也可以发现时间究竟是花在执行上,还是其他方面
也可以发现时间究竟是花在执行上,还是其他方面
#22
的确
联表查条件还是substring(mo.mobile,0,8)=substring(mobi.Region,0,8)
#23
恩,就是要检查一下网络问题。
再说你说的时快时慢。能不能具体点。不然不好判断啊
#24
慢是在某一个时间段内显示一直在查询,最后超时什么也查不出来。有时候就一点查询就直接查询出来了。但是系统中其它地方的查询都能查询出来,所以应该跟网络没有关系
#25
把它建成视图再试试。
#26
数据量比较大。。建议使用存储过程,将查询的结果 放 临时表, 在 取临时表数据加条件判断。
#27
这个不知道怎么试好。是有时候快,有时候就慢查不出来。就像上个星期五下午就查不出来,今天我在查就很快可以查出来。已经出现好几次了
#28
该存储过程吧
这样执行的效率肯定 会慢的
至于你说的时快时慢
是因为数据量的 并发处理 时多时少
这样执行的效率肯定 会慢的
至于你说的时快时慢
是因为数据量的 并发处理 时多时少
#29
#30
有可能出现死锁的情况吗?应为在查不出来的时候感觉好像是假死的状态
#31
建设用临时表吧,这个脚本很容易出错的。数据量大的话又不查
#32
打个SP_WHO ,看看你用的几张表是不是被其他进程锁了,锁了就会很慢
建议用临时表。表名后加上 with (nolock)
建议用临时表。表名后加上 with (nolock)
#33
看了你的SQL语句,我意识到我的sql也很菜...
#34
顶一个!
#35
建议用临时表。表名后加上 with (nolock)
#36
看着这sql我就有点头大阿
#37
我也寫過自動增號的sql,用生成視圖的方法速度還可以,試一下吧
#38
监视实际执行计划,看看开销浪费在哪
#39
用存储过程试试吧 或者你把后面from的语句写成left join 语句 调用下?
#40
SELECT *
FROM
(SELECT top 20 *
FROM
(SELECT moo.linkid ,
moo.mobile ,
moo.matchcode ,
mocontent ,
motime ,
moo.spcode ,
moo.stat ,
moo.state ,
moo.company ,
mt.linkid mtlinkid,
mtcontent ,
mttime ,
mt.stat mtstat ,
RowNumber
FROM
(SELECT linkid ,
mobile ,
mo.matchcode ,
mocontent ,
motime ,
spcode ,
stat ,
Province state,
company ,
ROW_NUMBER() OVER (ORDER BY id) AS RowNumber
FROM t_jbxs_mo_log mo ,
t_mobile_zipcode mobi,
t_jbxs_matchinfo matc
WHERE substring(mo.mobile,0,8)=substring(mobi.Region,0,8)
AND matc.matchcode =mo.matchcode
) moo
LEFT JOIN t_jbxs_mt_log mt
ON mt.linkid=moo.linkid
) result
WHERE RowNumber>(100-1)*20
) resultOrder
ORDER BY motime DESC
帮楼主排了下版
#41
用不用存储过程,有什么影响?
#42
RowNumber>(100-1)*20
这个是固定的值么,如果是最好大于该值,不要用表达式在计算该值。
这个是固定的值么,如果是最好大于该值,不要用表达式在计算该值。
#43
在系统中很慢,但在查询分析器中很快,这个可以参考一下:
http://www.cnblogs.com/bluedoctor/archive/2011/03/04/1970866.html
http://www.cnblogs.com/bluedoctor/archive/2011/03/04/1970866.html