我有一个大约有150万行的表,date_run是非簇的索引。查询#1需要0秒才能完成,查询#2需要3秒。有人可以解释为什么查询#2运行较慢。我还包括两者的执行计划。 Sql server版本2014。
查询#1
select avg14gain
from stocktrack
where
date_run >= '2013-3-21'
and date_run < '2013-3-22'
Valid XHTML http://biginkz.com/Pics/DateHardCoded.jpg
查询#2
declare @today date
declare @yesterday date
set @today='2013-3-22'
set @yesterday='2013-3-21'
select avg14gain
from stocktrack
where
date_run >= @yesterday
and b.date_run <@today
答案 0 :(得分:0)
我不确定您的查询为何没有获取索引,但您可以使用index hint。
尝试这样的事情:
declare @today date
declare @yesterday date
set @today='2013-3-22'
set @yesterday='2013-3-21'
select avg14gain
from stocktrack
where
date_run >= @yesterday
and b.date_run <@today
with (index([stocktrack].[ix_drun]))
您也可以尝试这篇文章中的建议:TSQL not using indexes。 请参阅@Justin Dearing的答案(重建索引/更新统计数据)。
答案 1 :(得分:0)
在date_run上创建索引,并将avg14gain作为该索引上的INCLUDE列。这样,整个查询就可以从一个索引中得到满足,优化器就会看到它。