【发布时间】:2014-08-23 20:47:28
【问题描述】:
当我在查询中间使用字符串作为日期时,我在查询中看到性能下降(慢 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制作三个单独的变量? -
如果需要将字符串解析为每一行的日期。而且它可能会扼杀索引的使用。
标签: sql performance tsql datetime type-conversion