查询微调

Query Fine Tune

提问人:Sridhar 提问时间:12/24/2012 最后编辑:ArpitSridhar 更新时间:12/24/2012 访问量:386

问:

我有一个简单的查询,大约需要 7-8 秒才能从数据库中检索数据,我想进一步微调到 2-3 秒。

桌子:

UpdateDateTime | field1 | field2 |..... FieldN.

查询是:

Select *  
from Table with (nolock)  
where UpdateDateTime Between D1 and D2  
Order By UpdateDateTIme  

我已经创建了聚簇索引UpdateDateTime

可以做些什么来进一步提高其效率?

SQL 服务器-2008

评论

0赞 Kieren Johnstone 12/24/2012
这取决于很多很多事情。您的服务器装备精良吗?是否正在通过 Internet 运行查询?

答:

3赞 Mitch Wheat 12/24/2012 #1

减少返回的列数是显而易见的答案,然后在 和其他选定的列上创建一个覆盖(非聚集)索引。UpdateDateTImeINCLUDE

CREATE NONCLUSTERED INDEX NC_MyCoveringIndex 
   ON Table(UpdateDateTime)
      INCLUDE (Col1, Col2, ..., ColN)

编号

[注意:创建包含表中所有列的宽覆盖索引并不理想。

很大程度上取决于您的条款的选择性。如果它返回的行数(大约)大于表中行数的 10%,则优化器可能仍然只会扫描聚簇索引。WHERE

差不多就是这样。除此之外,您还需要查看您的硬件,以及您正在拉取多少数据。

评论

0赞 Sridhar 12/24/2012
但我需要所有的领域。你能告诉我如何创建覆盖索引吗,是: 在<> Include()上创建索引<>
0赞 Mitch Wheat 12/24/2012
实际上,您不应该在所有列上创建覆盖索引。不理想。但是,是的,这就是语法。