ado*_*lot 6 performance sql-server-2008 sql-server query-performance
通常我getdate()
在我的 where 子句中使用函数来回到过去。就像是:
DOC.DATUM >= DATEADD(DD,-1*SSN_SDO.DANA_ZA_POVRAT,GETDATE())
Run Code Online (Sandbox Code Playgroud)
如果我首先声明一个日期参数并在查询中使用它,SQL Server 2008R2 会执行更快的查询吗?
declare @dateNow date = getdate()
...
where
DOC.DATUM >= DATEADD(DD,-1*SSN_SDO.DANA_ZA_POVRAT,@dateNow )
Run Code Online (Sandbox Code Playgroud)
答案是 - 您必须对其进行测试才能找到答案。
我在一个有大约 8,000,000 行的表上做了我自己的测试
DECLARE @date DATETIME
SET @date = GETDATE()
;
SELECT T.DateCol, DATEADD(dd,-100,@date)
FROM dbo.TableName AS T
WHERE T.DateCol > DATEADD(dd,-100,@date)
;
SELECT T.DateCol, DATEADD(dd,-100,GETDATE())
FROM dbo.TableName AS T
WHERE T.DateCol > DATEADD(dd,-100,GETDATE())
;
Run Code Online (Sandbox Code Playgroud)
在我的例子中,变量的使用导致 SQL Server 估计了一个昂贵的计划:
原因是SQL Server在编译时建立查询计划
,当时变量的值还不知道,SQL Server不能使用统计信息。
我建议你阅读参数化
在其他情况下,使用变量的成本会低于多次调用函数的成本,
所以这里又是 - TEST TEST 和 TEST :)
归档时间: |
|
查看次数: |
6844 次 |
最近记录: |