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

2022-03-24 19:05:21 字數 1113 閱讀 1341

專案中使用到了分頁查詢,形式如下

1

select

*from2(

3select row_number() over (order

by a.id0) as seq,a.*

from

4pms_t_d_stakecoordinate a

5left

join zy_t_d_route b on a.route_code=

b.route_code

6 ) ast7

where seq between

1and

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對單錶影響不大,可能是因為我的查詢中有太多的聯查???

sql語句 關聯查詢

1,關聯查詢 sql中多個left join,為了保證返回數量和主表一樣,要加個group by 主表id 2,if,ifnull,concat ws等常見方法 1 concat ws country,province,city region 三欄位按照 之間的內容合拼 concat ws case...

SQL語句三表聯查

首先啊,了解一下左右內連線都是什麼意思,我目前理解的就是,左連線就是把左表的東西都顯示出來,右表也是同理,內連線就是顯示兩個表共同的內容。現在有基礎知識了開始後續。首先這次我用的表是他們仨 先來乙個雙表查詢 左連線 left join 左邊是左表也就是你全查詢出來的表,右邊的聯查的第二張表。on是他...

三 複雜sql語句之多表聯查

像這種sql語句的核心是 建立目標字段之間的關係對映表,中間依靠各種中間臨時表來搭建 複雜sql語句 update business b,建立商戶與星級的對應關係表 select o.business id,sum a.star totalstar,count totalcomment from o...