where子句中的TSQL日期时间函数

时间:2013-11-12 10:48:20

标签: performance tsql datetime

我必须查询托管在MSSQL服务器中的数据库的表。

查询如下:

select *
from tableA
where createdOn between @startDate and @endDate

@startDate和@endDate变量的类型是datetime。如果@endDate等于当前日期且@startDate等于前一个月的日期,我认为我们可以将查询作为

declare @startDate datetime
declare @endDate datetime

set @startDate = DATEADD(month,-1,GETDATE())
set @endDate = GETDATE()


select *
from tableA
where createdOn between @startDate and @endDate

select *
from tableA
where createdOn between DATEADD(month,-1,GETDATE()) and GETDATE()

我认为第一个查询会比第二个查询更快,因为在第二个查询中我们调用where子句中的函数。我写了两个版本的查询,我也执行了它们。但是,我没有注意到性能有任何显着差异。

有人可以解释我为什么没有看到任何变化。也许认为第一个查询应该更快,第二个是错误的。请告诉我,id就是这样,为什么是错的。

提前感谢您的帮助。

1 个答案:

答案 0 :(得分:2)

查询优化工具。

查询优化器使两个查询都相同。它知道GETDATE()对于所有测试都是相同的,因此优化了调用。

请阅读此处:Query Optimiser Deep DiveQuery Optimiser获取比您想要的更多信息: - )

相关问题