我使用SQL Server 2008和我的SQL查詢看起來是這樣的:如何讓sql運行更快?
select * from (
select row_number() over(PARTITION by tb01.P_USER order by tb04.P_data7 desc) Row
,tb01.P_USER as 'enterpriseID'
,tb01.P_ID as 'greenhouseID'
,tb01.P_NAME as 'greenhouseName'
,tb04.P_data1 as 'airTemp'
,tb04.P_data2 as 'airHi'
,tb04.P_data3 as 'soilTemp'
,tb04.P_data4 as 'soilHi'
,tb04.P_data5 as 'co'
,tb04.P_data6 as 'sun'
,tb04.P_data7 as 'pickingTime'
,tb05.P_data5 as 'params'
from TB04 tb04,TB01 tb01,TB05 tb05,TB12 tb12
where tb04.P_data8 = tb05.P_data2
and tb05.P_data1=tb01.P_ID
and tb01.P_USER = tb12.P_data1
and tb12.CodeId = '410621'
) result where Row between (3-1)*20+1 and 3*20
我想挑出其中的20,但是當我跑這個SQL,花了約8秒,這當然,分別出我們的期望。
會有人幫助我?thx。
被修改: 我已經刪除了「PARTITION by tb01.P_USER」,其查詢速度增加了一倍。 目前低於該高管計劃單列:
的排序發生的查詢98%的時間,我應該爲此做些什麼呢?如果我必須移除over函數並使用另一種更有效的方法?
[不良習慣踢:使用舊式JOIN](http://sqlblog.com/blogs/aaron_bertrand/archive/2009/10/08/bad-habits-to-kick-using-old-style- joins.aspx) - 舊式*逗號分隔的表*樣式列表已停止使用ANSI - ** 92 ** SQL標準(**超過20年**前) –
我知道這一點。我只是拿代碼形式的其他人手,我必須修改此。 – CharlieShi
@marc_s thx編輯this.Now我刪除了「PARTITION by tb01.P_USER」,其查詢速度加倍。 – CharlieShi