在查詢中,當我在查詢中使用字符串作爲日期時,我發現查詢中的性能下降(速度降低了2倍-3倍),而不是將字符串值放入首先變量爲smalldatetime
。因此,例如,例如在不首先轉換爲日期時間時性能顯着下降
declare @rptDate AS smalldatetime
set @rtpDate = CAST('2014-06-22' AS smalldatetime)
SELECT SUM(tons) FROM sales
WHERE ItemClass IN (1, 3, 5, 7)
AND AcctNo LIKE '31_-30[12]0'
AND YEAR(InvDate) = YEAR(@rptDate)
AND MONTH(InvDate) = MONTH(@rptDate) '
AND DAY(InvDate) <= DAY(@rptDate)
肯定比
SELECT SUM(tons) FROM sales
WHERE ItemClass IN (1, 3, 5, 7)
AND AcctNo LIKE '31_-30[12]0'
AND YEAR(InvDate) = YEAR('2014-06-22')
AND MONTH(InvDate) = MONTH('2014-06-22')
AND DAY(InvDate) <= DAY('2014-06-22')
那麼,爲什麼 「適當的優化」 不是這裏發生的更快?
你有沒有試圖使三個獨立瓦爾爲'@ month','@ day'和'@ year'? – dasblinkenlight
如果需要解析字符串到每一行的日期。它可能會阻止索引的使用。 – Paparazzi