我必须查询托管在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就是这样,为什么是错的。
提前感谢您的帮助。
答案 0 :(得分:2)
查询优化工具。
查询优化器使两个查询都相同。它知道GETDATE()对于所有测试都是相同的,因此优化了调用。
请阅读此处:Query Optimiser Deep Dive和Query Optimiser获取比您想要的更多信息: - )