25.4.23

Tips for DBA: Missing indexes recommendations

Вы, наверное, уже заметили, какую полезную информацию об индексах и о статистике использования существующих и, как это не удивительно, не существующих индексов можно получить в SQL Server из системных динамических административных представлений. Особенно впечатляет эта информация, когда её видишь в виде пользовательского отчёта приборной панели производительности SQL Server, которую в качестве бесплатного дополнения к SQL Server Management Studio предлагает использовать Майкрософт.
Ниже представлен сценарий, который позволяет получить рекомендации по индексам, которых в обозримом прошлом недоставало базе данных, в контексте которой этот сценарий исполняется. Учтите, что сценарий в целях наглядности был упрощён, поэтому результирующие команды по созданию индексов, наверняка, будут содержать ошибки, т.к. тут не учитывается возможность отсутствия не относящихся к предикатам эквивалентности колонок, а также колонок, которые в индексе будут присоединёнными. Впрочем, эти ошибки легко устранимы, просто поищите лишние запятые перед запуском сценария, а также не забудьте удалить пустые инструкции INCLUDE.

-- Не забудьте поправить сценарий создания индексов,

-- убрав лишние запятые или пустую инструкцию INCLUDE

SELECT   [Рекомендуемый индекс]=

         '-- CREATE INDEX [IX_' + OBJECT_NAME(mid.object_id) + '_' +

         CAST(mid.index_handle AS nvarchar) + '] ON ' +

         mid.statement + ' (' + ISNULL(mid.equality_columns,'') +

         ', ' + ISNULL(mid.inequality_columns,'') +

         ') INCLUDE (' + ISNULL(mid.included_columns,'') + ');',

  [Число компиляций] = migs.unique_compiles,

  [Количество операций поиска] = migs.user_seeks,

  [Количество операций просмотра] = migs.user_scans,

  [Средняя стоимость ] = CAST(migs.avg_total_user_cost AS int),

  [Средний процент выигрыша] = CAST(migs.avg_user_impact AS int)

FROM     sys.dm_db_missing_index_groups mig

JOIN     sys.dm_db_missing_index_group_stats migs

ON       migs.group_handle = mig.index_group_handle

JOIN     sys.dm_db_missing_index_details mid

ON       mig.index_handle = mid.index_handle

AND      mid.database_id = DB_ID()

Комментариев нет:

Отправить комментарий