Datediff表现

Mur*_*dvi 9 t-sql sql-server datediff

我有一些天变量,我想与datetime列(senddate)进行比较.

我目前这样做:

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

DELETE
FROM TableA
WHERE datediff(dd, senddate, @RunDate) > @CalculationInterval 
Run Code Online (Sandbox Code Playgroud)

因此基本上10天以前的任何东西都应该被删除,我们在sendDate列上有索引,但速度仍然慢得多,我知道左侧不应该有性能原因的计算,但是解决这个问题的最佳方法是什么?问题?

Mit*_*eat 16

表达方式

WHERE datediff(dd, senddate, @RunDate) > @CalculationInterval 
Run Code Online (Sandbox Code Playgroud)

senddate由于LHS上的功能,将无法在列 上使用索引senddate

为了使WHERE子句'SARGable'(即能够使用索引),改为等效条件:

WHERE senddate < dateadd(dd, -@CalculationInterval, @RunDate)
Run Code Online (Sandbox Code Playgroud)

[感谢@Krystian Lieber,指出错误的情况].