次のような述語の関数を使用するクエリがあります。
commentType = 'EL'
AND commentDateTime >= DATEADD(month,datediff(month,0,getdate()) - 13,0)
40000行のcommentTypeにフィルター処理されたインデックスがあり、クエリを実行すると、インデックスシークの推定行数は非常に正確(約11K)ですが、次のステップ(ソート演算子)では、統計を完全に無視し、フィルターされたインデックスの行の総数を推定するだけです。
なんでこんなことが起こっているの?私はsargabilityの基本を知っており、正気を期すために、dateaddを実際の日付(2014-01-01)と実際の日付で置き換えてテストしました...ソートは行数を正しく推測し始めました...
なぜこれが起こっているのですか、どうすれば修正できますか?決まった日を渡すことはできません...
DATEADD(month, -13, DATEADD(day, 1-DATEPART(day, SYSDATETIME()))
何か違いがあるか試してみてください。
(commentType, commentDate)
、そこではより良い動作をしますか?フィルター処理されたインデックスが、計画のさまざまな時点で推定を誤って報告することがあります。フィルターされたインデックスの総数を報告することで見積もりはかなり外れたように見えますが、実際には計画が間違って表示されているのです。
DATEADD(month,datediff(month,0,getdate()) - 13,0)
私には意味がありません。これで何をしようとしていますか?改善/簡略化できるでしょうか?