Sql server 2008 SQL常量值或日期函数性能
在SQLServer2008上,这两个查询之间会有性能差异吗Sql server 2008 SQL常量值或日期函数性能,sql-server-2008,tsql,datetime,Sql Server 2008,Tsql,Datetime,在SQLServer2008上,这两个查询之间会有性能差异吗 SUM(CASE WHEN Date > DATEADD(M, -3, GETDATE()) THEN 1 ELSE 0 END) AS Active 及 还是有更好的实施方案?至于您关于更好实施方案的问题: 您的查询实际上模拟了COUNT函数 SELECT COUNT(Date) FROM tblX WHERE Date > DATEADD(M, -3, GETDATE()) 顺便说一句,在TSQL中,您应该将日期文
SUM(CASE WHEN Date > DATEADD(M, -3, GETDATE()) THEN 1 ELSE 0 END) AS Active
及
还是有更好的实施方案?至于您关于更好实施方案的问题:
您的查询实际上模拟了
COUNT
函数
SELECT COUNT(Date)
FROM tblX
WHERE Date > DATEADD(M, -3, GETDATE())
顺便说一句,在TSQL中,您应该将日期文字写成'20131128'
“差异”的问题对我来说没有任何意义。我猜你认为明天会有不同的结果
编辑:
两个查询的性能应该相同。只有在列值本身上使用函数时才会产生影响,GETDATE()
不会对示例中的每一行执行(我假设未测试)。请参见此处:-特别是示例1和示例4。区别在于,其中一个硬编码为2013年11月28日,另一个硬编码为3个月前。 所以明天我们将给出不同的值 当然,你可以参数化文字,所以它可以是4个月或2个月等等,但是你仍然需要计算出截止日期
否则,效率几乎没有差别:查询的其余部分(JOIN,WHERE等)决定查询性能,因为此总和将很晚执行标量值上的函数只计算一次,并通过查询重用,因此,从性能角度来看,这两种查询没有区别。谢谢。通过“差异”,我指的是性能上的差异,因为我认为函数会在表中的记录数量中执行多次。很明显,SqAcLabess是编写SQL时要考虑的一个重要问题(并且您用它做了一个很好的点),但我认为这里不是这样。它是比较一个常量值和一个确定性函数在一个常量值上的性能,对于SQL Server来说,这是相同的。谢谢。我的意思是首先计算文本,并将其保存到变量中,而不是在
案例中使用date函数,如果有任何性能提升的话。
SELECT COUNT(Date)
FROM tblX
WHERE Date > DATEADD(M, -3, GETDATE())