Неиспользуемые индексы вызывают проблемы с производительностью сервера SQL?И я должен удалить их? - PullRequest
1 голос
/ 01 сентября 2011

Я потратил некоторое время на изучение этого вопроса и просто не могу найти окончательного ответа.Вот запрос, который я использую для поиска неиспользуемых индексов:

SELECT object_name(i.object_id) as tableName, i.name as indexName
FROM sys.indexes i
LEFT JOIN sys.dm_db_index_usage_stats s ON i.object_id = s.object_id AND i.index_id = s.index_id AND s.database_id = db_id()
WHERE objectproperty(i.object_id,'IsUserTable') = 1 and i.index_id> 0
AND s.object_id IS NULL
AND i.is_Primary_Key = 0
AND i.is_unique_constraint = 0
AND i.is_unique = 0

Насколько я понимаю, индексы, возвращаемые этим запросом, не использовались оптимизатором запросов с момента последнего перезапуска сервера sql.Я считаю, что я должен удалить их .... Я просто не до конца понимаю, есть ли последствия для производительности или вред от их ухода.

Ответы [ 2 ]

7 голосов
/ 01 сентября 2011

Вред от того, что они остаются, заключается в используемом пространстве и увеличенной работе для операторов INSERT, UPDATE и DELETE, так как они должны обновлять индексы, а также базовую таблицу.

5 голосов
/ 01 сентября 2011

Есть последствия для производительности, оставляя их там; индексы поддерживаются для каждой вставки, обновления или удаления в таблицу.

С другой стороны, откуда вы знаете, что индекс не использовался? DMV великолепен, но он охватывает только время с момента последнего перезапуска SQL Server. Таким образом, если у DMV нет данных за полный бизнес-цикл, вы можете убить годовой отчет генерального директора при следующем его запуске.

По моему скромному мнению: никогда, никогда, никогда не бросайте индекс, основанный исключительно на информации в использовании DMV.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...