提问人:Sridhar 提问时间:12/24/2012 最后编辑:ArpitSridhar 更新时间:12/24/2012 访问量:386
查询微调
Query Fine Tune
问:
我有一个简单的查询,大约需要 7-8 秒才能从数据库中检索数据,我想进一步微调到 2-3 秒。
桌子:
UpdateDateTime | field1 | field2 |..... FieldN.
查询是:
Select *
from Table with (nolock)
where UpdateDateTime Between D1 and D2
Order By UpdateDateTIme
我已经创建了聚簇索引UpdateDateTime
可以做些什么来进一步提高其效率?
答:
3赞
Mitch Wheat
12/24/2012
#1
减少返回的列数是显而易见的答案,然后在 和其他选定的列上创建一个覆盖(非聚集)索引。UpdateDateTIme
INCLUDE
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
实际上,您不应该在所有列上创建覆盖索引。不理想。但是,是的,这就是语法。
下一个:table 值函数查询优化
评论