我有一些天变量,我想与datetime列(senddate)进行比较。
我目前正在这样做:
DECLARE @RunDate datetime = '2013-01-01'
DECALRE @CalculationInterval int = 10
DELETE
FROM TableA
WHERE datediff(dd, senddate, @RunDate) > @CalculationInterval
所以基本上所有比10天还旧的东西都应该删除,我们在sendDate列上有Index,但是速度仍然慢得多,我知道左侧出于性能原因不应该进行计算,但是解决该问题的最佳方法是什么问题?
最佳答案
表达方式
WHERE datediff(dd, senddate, @RunDate) > @CalculationInterval
由于senddate
列上的功能,将无法在senddate
列上使用索引为了使
WHERE
子句为“SARGable”(即能够使用索引),请更改为等效条件:WHERE senddate < dateadd(dd, -@CalculationInterval, @RunDate)
[感谢@Krystian Lieber,指出错误的状态]。