12

日時列(senddate)と比較したい日数変数があります。

私は現在これを行っています:

DECLARE @RunDate datetime = '2013-01-01' 
DECLARE @CalculationInterval int = 10

DELETE
FROM TableA
WHERE datediff(dd, senddate, @RunDate) > @CalculationInterval 

10日より古いものはすべて削除する必要があります。sendDate列にインデックスがありますが、それでも速度ははるかに遅くなります。パフォーマンス上の理由から左側に計算を行うべきではないことは知っていますが、この問題を解決するための最適な方法は何ですか?

4

1 に答える 1

20

表現

WHERE datediff(dd, senddate, @RunDate) > @CalculationInterval 

senddate列の関数のため、列 のインデックスを使用できなくなりますsenddate

句「SARGable」を作成するにはWHERE(つまり、インデックスを使用できるように)、同等の条件に変更します。

WHERE senddate < dateadd(dd, -@CalculationInterval, @RunDate)

[間違った状態を指摘してくれた@KrystianLieberに感謝します]。

于 2013-01-24T14:59:17.720 に答える