6

我正在修改创建查询以查找丢失的索引。我采用了 Red-Gate 人员在他们的 SQL Server DMV Starter Pack 电子书中创建的基本查询,并对其进行了一些修改。有几列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 可能意味着什么。

谢谢。

4

2 回答 2

9

我对这些的解释是:

于 2010-09-15T14:06:02.290 回答
5

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

这里有一篇文章使用此计算来给出总体影响值:

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成有用的东西来做出决策。

于 2014-09-26T12:58:30.147 回答