Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/sql-server-2008/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 2008 SQL常量值或日期函数性能_Sql Server 2008_Tsql_Datetime - Fatal编程技术网

Sql server 2008 SQL常量值或日期函数性能

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中,您应该将日期文

在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中,您应该将日期文字写成
'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())