2013-01-24 23 views
8

我有一个天数变量,我想与日期时间列(senddate)进行比较。Datediff性能

即时通讯目前这样做:

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

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

所以基本上较旧的内容然后是10天应被删除,我们有指数上sendDate列,但仍然是速度慢得多,我知道左边不应该有性能原因的计算,但解决这个问题的最佳方式是什么?

+0

如何在这种情况下查询“SARGable”? –

回答

12

表达

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

将无法​​对senddate

senddate列中使用的索引,因为在LHS的功能为了使WHERE子句“可优化搜索” (即能够使用索引),改变为等效的条件:

WHERE senddate < dateadd(dd, [email protected], @RunDate) 

[由于@Krystian利伯,用于指出incorr等条件]。

+0

1为可优化搜索 – WKordos

+1

我认为条件应该是 WHERE senddate DATEADD(DD,@CalculationInterval,@RunDate) 为@ RunDate = '2013-01-11'和@ CalculationInterval = 10我们删除了所有包含senddate>'2013-01-21'的行时,我想我们要删除所有包含senddate的行<'2013-01-01' –

+0

@Krystian Lieber - 正确的我已经在我的最后做了这个改变,只是想了解如何使它变得易懂:) –