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,指出错误的情况].
| 归档时间: |
|
| 查看次数: |
6319 次 |
| 最近记录: |