SQL聯查語句加上order排序之后速度超級慢


項目中使用到了分頁查詢,形式如下

1 select * from
2 (
3     select row_number() over (order by a.id0) as seq,a.* from
4     PMS_T_D_StakeCoordinate a
5     left join ZY_T_D_Route b on a.route_code=b.route_code    
6 ) as T
7 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對單表影響不大,可能是因為我的查詢中有太多的聯查???

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM