2009-07-28 74 views
7

在DMV sys.dm_db_missing_index_group_stats,有一个名为avg_user_impact场。每BOL,这显示SQL服务器avg_user_impact

如果实现此缺少的索引组,用户查询可能遇到的平均百分比收益。这个值意味着如果实现了这个缺失的索引组,查询成本平均下降了这个百分比。

当我运行一个查询来寻找丢失的索引,将有对性能的影响最大,我看到几个声称的avg_user_impact将在数千人。

我建立的这些建议一个索引,并根据DMV sys.dm_db_index_usage_stats这是从来没有使用过。一旦我禁用索引,它就会立即再次显示为缺失索引。

是否有可能,一旦avg_user_impact字段显示超过100个,这是错误的?或者,这是一个如何推荐的指数仍然需要进行有用性测试的例子吗?我在做什么错误或误解?

回答

7

推荐索引和用户的影响是从成本的优化都估计,而且,你看有没有保证,他们总是正确的。我认为用户影响列可以通过设计超过100(尽管我们不得不希望SQL Server团队的MS开发人员在这里回答真正的问题)。测试是否创建索引中显示的索引至关重要DMV将工作与否。我在那里显示索引时也有相同的经验,但是一旦创建实际上并未得到使用,可能是由于查询的细节或表中的数据分布等。视图在大多数情况下都是正确的,特别是对于简单情况,但并非总是如此。

同时,应注意有关创建真正的宽索引,因为他们可能会伤害插入/更新性能超过他们帮助选择性能,这取决于服务器的繁忙程度。

+2

的另一件事 - 这里有一个真正聪明的查询对建议的索引相关查询计划:http://social.msdn.microsoft.com/Forums/en-US/sqldatabaseengine/thread/71814032-cd8d-4802-80de -7fb2bee80f41 另请参见: http://sqlblog.com/blogs/jonathan_kehayias/archive/2009/07/27/digging-into-the-sql-plan-cache-finding-missing-indexes.aspx – onupdatecascade 2009-07-30 17:38:41

0

表的统计信息也必须更新,以确保SQL引擎使用新创建的索引。

创建索引后RUN

USE AdventureWorks2012; GO EXEC sp_updatestats; GO

更新STATISTICS命令将确保所有缓存的SQL计划失效,并使用新创建的索引构建新的SQL执行计划。

+0

嗨,Mayank。您的陈述可能不完全正确。这里是另一个应该帮助的stackoverflow文章:http://stackoverflow.com/questions/1930726/are-statistics-automatically-updated-when-a-new-index-is-created – Oliver 2014-08-22 17:07:59