2013-01-24 44 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 - 正確的我已經在我的最後做了這個改變,只是想了解如何使它變得易懂:) –