我经常使用SSMS测试我的慢速存储过程是否缺少索引.每当我看到“缺失索引(影响xxx)”时,我的膝盖反应就是创建新索引.据我所知,每次都会产生更快的查询速度.
我不应该继续这样做的任何理由?
解决方法
很多原因.
我能想到的最大问题之一是缺失的索引DMV没有考虑现有的索引.
例:
你有一张ColA,ColB,ColC的桌子.
目前你有一个关于ColA的索引.缺失的索引DMV将建议您在(ColA,ColB)上添加索引.这可能是正确的,但聪明的做法是将ColB添加为现有索引的第二个键.否则,您的覆盖范围会重复,浪费空间和开销.
同样,如果您有ColB INCLUDE(ColA)的索引,它可能会建议ColB INCLUDE(ColC)的索引.同样聪明的做法是将ColC添加到现有索引中的包含列表中.
建议的索引具有极窄的视图 – 它们只查看单个查询或单个查询中的单个操作.他们没有考虑已存在的内容或您的其他查询模式.
您仍然需要一个有思想的人来分析整体索引策略,并确保您的索引结构是高效和有凝聚力的.