SQL Server DMV - sys.dm_db_missing_index_group_stats - 这些列是什么意思?

时间:2010-09-15 13:34:28

标签: sql-server dynamic-management-views

我正在修改创建查询以查找缺失的索引。我已经在他们的SQL Server DMV Starter Pack电子书中采用了Red-Gate人员创建的基本查询,并对其进行了一些修改。 sys.dm_db_missing_index_group_stats中有几列我不知道如何解释。他们是:

avg_total_user_cost
avg_user_impact

根据文档,我发现avg_total_user_cost定义为 表示每次执行用户查询时的平均总用户成本 。并且,avg_user_impact 将值表示为百分比。它显示了创建索引时可以获得的改进量。

我的查询说应该添加的索引显示2.22平均用户成本和99.82用户影响。这些数字到底意味着什么?这是否意味着添加索引,我可以将关联查询的速度提高99.82%。我不知道2.22可能意味着什么。

感谢。

2 个答案:

答案 0 :(得分:9)

我对这些的解释是:

答案 1 :(得分:3)

@ Joe的回答似乎是正确的,我只是添加一些可能有用的信息:

有一篇文章here使用此计算来提供总体影响值:

avg_total_user_cost * avg_user_impact * (migs.user_seeks + migs.user_scans)) 

以下是他们建议的查询:

SELECT CONVERT (varchar, getdate(), 126) AS runtime, 
    mig.index_group_handle, mid.index_handle, 
    CONVERT (decimal (28,1), migs.avg_total_user_cost * migs.avg_user_impact * 
            (migs.user_seeks + migs.user_scans)) AS improvement_measure, 
    'CREATE INDEX missing_index_' + CONVERT (varchar, mig.index_group_handle) + '_' + 
              CONVERT (varchar, mid.index_handle) + ' ON ' + mid.statement + ' 
              (' + ISNULL (mid.equality_columns,'') 
              + CASE WHEN mid.equality_columns IS NOT NULL 
                          AND mid.inequality_columns IS NOT NULL 
                     THEN ',' ELSE '' END + ISNULL (mid.inequality_columns, '')
              + ')' 
              + ISNULL (' INCLUDE (' + mid.included_columns + ')', '') AS create_index_statement, 
    migs.*, 
    mid.database_id, 
    mid.[object_id]
FROM sys.dm_db_missing_index_groups AS mig
INNER JOIN sys.dm_db_missing_index_group_stats AS migs 
    ON migs.group_handle = mig.index_group_handle
INNER JOIN sys.dm_db_missing_index_details AS mid 
    ON mig.index_handle = mid.index_handle
ORDER BY migs.avg_total_user_cost * migs.avg_user_impact * (migs.user_seeks + migs.user_scans) DESC

结果improvement_measure是无单位的,即仅在相对意义上有用,但这应该有助于将dm_db_missing_index_group_stats中的不同值组合成一些有用的决策。