我無法在此處發佈實際查詢,所以我發佈了查詢的基本大綱,這應該足夠了。該查詢用於尋找並返回一組根據函數的輸出進行排序的用戶,例如F. F從User表和其他已加入的表中獲取參數。該查詢類似如下限制在此查詢中正在處理的行數
Select TOP (20)
from (select row_number OVER (Order By F desc) as rownum,
user.*, ..
from user
inner join X on user.blah = X.blah
left outer join Y on user.foo = Y.foo
where DATEDIFF(dd, LastLogin, GetDate()) > 200 and Y.bar > FUBAR) as temp
where rownum > 0
根據執行計劃91%的成本是在排序。由於排序是基於F,我無法添加索引來加速排序。內部查詢查詢所有記錄,過濾器然後排序。現在大多數時候用戶只是看1-5頁的結果(1頁有20條記錄,因此Top(20)),所以我想如果有什麼辦法可以限制正在處理和排序的行查詢速度更快,大部分時間CPU佔用更少。
編輯:當我說計算F表加入時,我的意思是這個。 F需要X.blah和Y.foo和Y.bar等參數。而已。所有這些參數也需要作爲結果集的一部分返回。例如用戶的最後位置的緯度和經度存儲在X.
謝謝!我編輯以澄清我的意思。 – shashi