私は SQL Server 2008 を使用しており、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。
編集: 「tb01.P_USER による PARTITION」を削除し、そのクエリ速度を 2 倍にしました。現在、実行計画は以下にリストされています。
並べ替えには、クエリ時間の 98% がかかります。これにはどうすればよいですか? オーバー機能を削除し、必要に応じて別のより効果的な方法を使用する必要がありますか?