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は15インデックスで70%を超え、28インデックスで30%を超えていました。
そこで、オラ・ハレングレンのソリューションを使用してすべてのインデックスを再構築します。クエリを再度実行したとき、これが結果でした:
12のインデックスで70%を超える断片化、15のインデックスで30%を超える断片化。
その理由は、page_count
まだ非常に断片化されている各インデックスの1000未満であるためだと考えました。たとえばpage_count
、967のインデックスの1
つには、98,98%の断片化率があります!私には、そのインデックスを再構築する価値があるようです!しましたが、その後、断片化は0%でした。また、インデックスpage_count
が132の場合、95%から0%になりました
だから、私の質問は、これらのインデックスを再構築しない理由は何ですか?理由の1つは、再構築に時間とリソースがかかることかもしれませんが、インデックスが小さいため、リソースのコストが比較的少なく、それでも再構築するのに有益であるということではありませんか?
このサイトには複数の関連する質問がありますが、それらはすべて、インデックスが最適化されない理由、またはインデックスが小さくても最適化されない場合にインデックスが依然として有用であるという質問に答えますが、ここでステートメントは断片化を減らします問題は、とにかくやってみませんか?