2010-09-15 5 views
5

Я занимаюсь созданием запроса, чтобы найти отсутствующие индексы. Я взял базовый запрос, созданный людьми Red-Gate в их книге SQL Server DMV Starter Pack, и немного модифицирую ее. Есть пара столбцов в sys.dm_db_missing_index_group_stats, которые я не знаю, как интерпретировать. К ним относятся:SQL Server DMV - 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.

Спасибо.

+0

У вас есть хороший запрос, чтобы найти отсутствующие индексы? –

+0

есть хороший здесь: http://www.geniiius.com/blog/missing-indexes –

ответ

9

Моя интерпретация этих была что:

  • avg_total_user_cost является текущим среднего значения всех запросов, которые могут потенциально извлечь выгоду из создания отсутствующего индекс группы. «Стоимость» - это безразмерное значение , рассчитанное оптимизатором . См: SQL SERVER – Execution Plan – Estimated I/O Cost – Estimated CPU Cost – No Unit

  • avg_user_impact представляет собой процент , представляющий среднее снижение стоимости всех запросов если недостающий индекс была создана группа. выше процент, чем больше , тем преимуществом будет новый индекс.

3

@ ответ Джо кажется правильным, я просто добавить некоторые, возможно, полезную информацию:

Там в статье 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 является uni то есть полезно только в относительном смысле, но это должно сочетать различные значения от dm_db_missing_index_group_stats во что-то полезное для принятия решений.