Упущенные индексы

Упущенные индексыSQL Server ведёт статистику недостающих/упущенных индексов основываясь на исполняемых запросах, но нельзя полностью доверять советам SQL Server, так как он не знает всей картины и не может её проанализировать. Стоит учесть следующие моменты:

1. Часто бывает так, что SQL Server может советовать создать 5 индексов в таблице, но на деле их можно объединить в один.
2. Нет смысла создавать индексы для запросов, которые были выполнены 1 раз и больше никогда не будут выполнятся или будут, но крайне редко.
3. Относитесь очень критично к этим советам и планируйте каждый создаваемый индекс через данные советы.

Вот код, с помощью которого можно увидеть недостающие индексы во всех таблицах:

SELECT user_seeks * avg_total_user_cost * (avg_user_impact * 0.01) AS [index_advantage], 
migs.last_user_seek, mid.[statement] AS [Database.Schema.Table],
mid.equality_columns, mid.inequality_columns, mid.included_columns,
migs.unique_compiles, migs.user_seeks, migs.avg_total_user_cost, migs.avg_user_impact
FROM sys.dm_db_missing_index_group_stats AS migs WITH (NOLOCK)
INNER JOIN sys.dm_db_missing_index_groups AS mig WITH (NOLOCK)
ON migs.group_handle = mig.index_group_handle
INNER JOIN sys.dm_db_missing_index_details AS mid WITH (NOLOCK)
ON mig.index_handle = mid.index_handle
ORDER BY index_advantage DESC OPTION (RECOMPILE);

Обратите внимание на:

1. last user seek time — данное время должно быть недавним, это время последней попытки сервера обратиться к несуществующему индексу
2. user seeks — количество таких попыток обращения
3. SQL Server пытается всегда советовать включённые столбцы, остерегайтесь этого
4. ВНИМАНИЕ! Не создавайте все предлагаемые индексы, очень внимательно подходите к этому процессу
5. Сервер сбрасывает свою статистику после рестарта или после принудительного сброса с помощью команд.

Запись опубликована в рубрике В помощь администратору с метками . Добавьте в закладки постоянную ссылку.

Добавить комментарий

Войти с помощью: