Я использую скрипт Ola Hallengrens для поддержки индекса. Прежде чем сделать это, я использовал следующий запрос, чтобы увидеть, какие индексы наиболее фрагментированы:
SELECT dbschemas.[name] as 'Schema',
dbtables.[name] as 'Table',
dbindexes.[name] as 'Index',
indexstats.avg_fragmentation_in_percent,
indexstats.page_count
FROM sys.dm_db_index_physical_stats (DB_ID(), NULL, NULL, NULL, NULL) AS indexstats
INNER JOIN sys.tables dbtables on dbtables.[object_id] = indexstats.[object_id]
INNER JOIN sys.schemas dbschemas on dbtables.[schema_id] = dbschemas.[schema_id]
INNER JOIN sys.indexes AS dbindexes ON dbindexes.[object_id] = indexstats.[object_id]
AND indexstats.index_id = dbindexes.index_id
ORDER BY indexstats.avg_fragmentation_in_percent desc
В моем случае avg_fragmentation было более 70% для 15 индексов и более 30% для 28 индексов.
Итак, я перестраиваю каждый индекс, используя решение Олы Хелленгрен. Когда я снова запустил запрос, это был результат:
Фрагментация более 70% для 12 индексов, более 30% для 15 индексов.
Я полагал, что причина была в том page_count
, что было ниже 1000 для каждого из индексов, которые все еще были очень фрагментированы. Например, один из индексов с
page_count
967 имеет процент фрагментации 98,98% ! Мне кажется, стоит пересмотреть этот индекс! Я сделал, и после этого фрагментация составила 0% . Кроме того, индекс с page_count
132 изменился с 95% до 0%
Итак, мой вопрос: по каким причинам НЕ нужно перестраивать эти индексы? Одна из причин может заключаться в том, что восстановление требует затрат времени и ресурсов, но поскольку индексы невелики, не означает ли это, что это стоит относительно небольшого количества ресурсов, и все равно было бы полезно восстановить его в любом случае?
На этом сайте есть несколько связанных вопросов, но все они отвечают на вопрос, почему индекс не будет дефрагментировать, или если индексы все еще полезны, если они маленькие, и вы не дефрагментируете их, тогда как здесь утверждение ДЕЛАЕТ уменьшить фрагментацию с вопрос в том, почему бы не сделать это в любом случае?