为什么第一个查询花费的时间少于SQL Server中的第二个查询?
此查询需要4秒钟才能完成:
select *
from salesinvmaster
where day(salesdate) = day(getdate()) and
month(salesdate) = month(getdate()) and
year(salesdate) = year(getdate())
此查询需要10秒钟:
select *
from salesinvmaster
where salesdate between '2017-11-01 00:00:00' and '2017-11-01 23:59:59'
答案 0 :(得分:4)
这两个问题是不同的,因为今天是12月的某一天,而不是11月1日。
我的猜测是你在salesdate
列上没有索引,并且第一个查询返回的行数较少 - 因此,它看起来更快。为了记录,我建议将逻辑编写为以下之一:
where convert(date, salesdate) = convert(date, getdate())
where salesdate >= convert(date, getdate()) and
salesdate < dateadd(day, 1, convert(date, getdate()))
请注意,SQL Server 使用索引将日期/时间值转换为日期。当函数不阻止使用索引时,这是罕见的(仅?)时间之一。
至于第二种方法,它不需要包括值的时间分量。
答案 1 :(得分:3)