Sql-Server

我怎樣才能使這個執行計劃更有效率?

  • July 3, 2019

我已經計算出所有隱式轉換,但我仍然在計劃中看到提到它。我已附上該計劃,任何建議都會有所幫助。

select cardholder_index, sum(value) as [RxCost] 
into #rxCosts 
from RiskPredictionStatistics with (nolock) where model_name = 'prescription_cost_12_months'
and model_set_name = 'rx_updated' and run_id in (select value from #runIds) 
and exists (select 1 from StringContainsHelper with (nolock) where IntValue = cardholder_index and ReferenceId = @stringContainsHelperRefId)
group by cardholder_index

https://www.brentozar.com/pastetheplan/?id=SyHl9xFeS

看起來當你填充#runIds表格時——我只是在這裡猜測一下——你正在使用一個字元串拆分器函式,該函式將值輸出為NVARCHAR(MAX).

堅果

您可以嘗試轉換那裡的值以消除隱式轉換警告。

另一個可能的改進是將NonClustereIndex-CardholderRiskProductionStatistics 上的索引更改model_set_name為鍵列和model_name, run_id, value包含列。這將解決密鑰查找問題。

堅果

堅果

您可能還想檢查model_name. 它出現在 Filter 運算符中,我擔心它是 MAX 數據類型,這可能會阻止謂詞被 push down

堅果

由於這是一個估計的計劃,並且您沒有包含有關查詢的任何指標,因此很難說這些更改會帶來多少改進。

引用自:https://dba.stackexchange.com/questions/241904