web-dev-qa-db-ja.com

この実行プランをより効率的にするにはどうすればよいですか?

私はすべての暗黙の変換を解決しましたが、計画にはまだそれが言及されています。私は計画を添付しました、そして、どんな推薦でも役に立ちます。

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

2

_#runIds_テーブルにデータを入力するときのように見えます-そしてここではワイルドな推測をしています-値をNVARCHAR(MAX)として出力する文字列分割関数を使用しています。

NUTS

そこで値を変換して、暗黙の変換警告を取り除くことができます。

別の可能な改善点は、RiskProductionStatisticsの_NonClustereIndex-Cardholder_インデックスを変更して、_model_set_name_をキー列として、_model_name, run_id, value_をインクルード列として持つことです。これはキールックアップに対処します。

NUTS

NUTS

_model_name_のデータ型を確認することもできます。これはFilter演算子に表示されますが、私の恐れは、MAXデータ型であるため、 述語がプッシュダウンされないようにする になる可能性があります。

NUTS

これは推定計画であり、クエリに関するメトリックが含まれていないため、これらの変更によってどれほどの改善が見られるかはわかりません。

10
Erik Darling