インデックス再構築の必要性
データベースに大量のデータが削除、追加されると索引がバラバラ(=断片化)になる
インデックスの断片化が進むとインデックスの効率が低下し、クエリの実行速度に影響を及ぼすためインデックスの再構築もしくは再構成が必要になる
インデックス再構築手順
1. インデックスの断片化率を確認する
SELECT
i.name AS インデックス名,
ips.avg_fragmentation_in_percent as 断片化率,
ips.page_count as ページ数
FROM
sys.dm_db_index_physical_stats(DB_ID(), default, default, default, default) AS ips
JOIN sys.indexes AS i
ON ips.object_id = i.object_id
AND ips.index_id = i.index_id
WHERE
OBJECT_NAME(ips.object_id) = 'テーブル名'
ORDER BY
avg_page_space_used_in_percent DESC;
実行結果
すべてのインデックスで断片化率が80%以上であり、パフォーマンスが低下している可能性がある
2. 断片化率に応じてインデックスの再構築・再構成を実施する
[断片化率が小さい(30%未満)場合]
インデックスの再構成を実施する
インデックスの再構成はインデックスをオンラインのまま並び替える処理であり、消費リソースや運用面の負担が少ない
ただし断片化率に比例して処理時間が増えるため断片化率が大きい場合は再構築が望ましい
ALTER INDEX [インデックス名] ON [テーブル名] REORGANIZE
[断片化率が大きい(30%以上)場合]
インデックスの再構築を実施する
インデックスを削除して作り直す処理であり、消費するリソースや運用面への負担が大きい
断片化率が大きい場合は再構成より有効であるとされている
ALTER INDEX [インデックス名] ON [テーブル名] REBUILD