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
或者是否有更好的实施?
答案 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)
标量值上的函数计算一次并通过查询重用,因此,在性能方面,两个查询没有区别。