SQL常量值或日期函数性能

时间:2014-02-28 09:27:32

标签: sql-server-2008 tsql datetime

SQL Server 2008上的这两个查询之间是否存在任何性能差异?

SUM(CASE WHEN Date > DATEADD(M, -3, GETDATE()) THEN 1 ELSE 0 END) AS Active

SUM(CASE WHEN Date > '2013-11-28' THEN 1 ELSE 0 END) AS Acttive

或者是否有更好的实施?

3 个答案:

答案 0 :(得分:0)

关于更好实施的问题:
您的查询字面上模拟COUNT函数。

SELECT COUNT(Date)
FROM tblX
WHERE Date > DATEADD(M, -3, GETDATE())

顺便说一句,在TSQL中,您应该将日期文字写为'20131128'

“差异”的问题对我没有任何意义。我猜你明天它会产生不同的结果......

编辑

两个查询的性能应该相同。如果在Column值本身上使用函数,则只会产生影响,GETDATE()不会为示例中的每一行执行(我假设,未经测试)。
见这里:SARGability - 特别是例子1和4。

答案 1 :(得分:0)

区别在于,一个是硬编码到2013年11月28日,另一个是3个月前。 所以明天一个人会给出不同的价值......

你当然可以参数化,所以它可能是4个月或2个月等,但你仍然需要计算来计算截止日期。

否则,效率几乎没有差别:查询的其余部分(JOIN,WHERE等)决定了查询性能,因为这个SUM将很晚执行

答案 2 :(得分:0)

标量值上的函数计算一次并通过查询重用,因此,在性能方面,两个查询没有区别。