通常我getdate()
在 where 子句中使用该函数来及时返回。就像是:
DOC.DATUM >= DATEADD(DD,-1*SSN_SDO.DANA_ZA_POVRAT,GETDATE())
如果我首先声明一个日期参数并在我的查询中使用它,SQL Server 2008R2 会执行更快的查询吗?
declare @dateNow date = getdate()
...
where
DOC.DATUM >= DATEADD(DD,-1*SSN_SDO.DANA_ZA_POVRAT,@dateNow )
答案是——你必须测试它才能找出答案。
我在一张有约 8,000,000 行的桌子上做了自己的测试
在我的例子中,变量的使用导致 SQL Server 估计一个昂贵的计划:
原因是SQL Server在编译时构建了查询计划
,此时变量的值还不知道,SQL Server无法使用统计信息。
我建议您阅读有关参数化的信息
在其他情况下,使用变量的成本会比多次调用函数的成本低,
所以这里又是 - TEST TEST 和 TEST :)
最重要的是,您需要将其放入变量的主要原因是您是否希望在代码的其他地方使用完全相同的值(在那个确切时间获得 GETDATE())。否则,它的性能差异真的是一个有争议的问题。