我的是SQL Server 2008上这样的查询:SQL Server是否在选择查询中优化DATEADD计算?
DECLARE @START_DATE DATETIME
SET @START_DATE = GETDATE()
SELECT * FROM MY_TABLE
WHERE TRANSACTION_DATE_TIME > DATEADD(MINUTE, -1440, @START_DATE)
在你上面看到的选择查询,并SqlServer的优化查询,以不一次又一次计算DATEADD结果。或者,我自己有责任将DATEADD结果存储在临时变量中?
+1令人惊讶。只是看着它,我认为这是因为SQL Server不会执行变量嗅探,所以总会认为'> @ variable'将匹配30%的行(并且计划中显示的成本仅基于此估计) 。至少在编译计划时,DATEADD(MINUTE,-1440,getdate())版似乎更加准确。 –
GetDate()查询的一个潜在问题/边缘情况是它在编译时被评估,选择性可能会随着时间的推移而发生巨大变化[无需触发重新编译](http://stackoverflow.com/a/9905880/73226) –