您的位置:首页 > 数据库

SQL联查语句加上order排序之后速度超级慢

2017-06-29 10:52 204 查看

项目中使用到了分页查询,形式如下

select * from
(
select row_number() over (order by a.id0) as seq,a.* from
PMS_T_D_StakeCoordinate a
left join ZY_T_D_Route b on a.route_code=b.route_code
) as T
where seq between 1 and 1000

本来分页查询应该是很快的,但是随着项目的进展,数据量逐步增加到了百万级,此查询直接报错“服务器连接超时”

于是将SQL考到SqlServer里面执行,发现需要2分多钟才能出结果

去掉“row_number() over (order by id0) as seq”之后时间减少到了15秒,这个差距太大了。。。

于是猜测是order by 的问题,在查询后面加上order by id0,查询时间又飙到了2分钟,果然如此

于是,寻求加自增长编号的方法替代order by

select IDENTITY(INT,1,1) as orderID,*
into #ttemp
from

(

  table...

) where seq between pageBegin and pageEnd

select * from #ttemp

但是这里也有个问题,通过自增IDENTITY(INT,1,1)得到的orderID不是按顺序排列的,这个地方没搞清楚,求解求指点??????

不得已,在select * from #ttemp后面再order by一次,如下

select * from #ttemp  order by orderID

这个担心用order by又会导致查询时间飙升,但结果也只花了16秒,nice!

如此看来,order by对单表影响不大,可能是因为我的查询中有太多的联查???

 

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: