1

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

查询如下:

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

变量@startDate 和@endDate 的类型是日期时间。如果@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是这样,为什么是错误的。

提前感谢您的帮助。

4

1 回答 1

2

查询优化器。

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

在这里阅读:查询优化器 Deep Dive查询优化器以获得比您想要的更多的信息 :-)

于 2013-11-12T11:02:09.630 回答