SQLServerで断片化したインデックスを再構築しインデックスする方法です。
SQLServerの断片化したインデックスを検索する方法
SQLServerで断片化したインデックスが発生するとSQLのパフォーマンスが遅くなることがあります。
そんな時はインデックスファイルの断片化が進んでしまったのかもしれません。
一度、インデックスを再構築すると元のスピードに戻るかもしれません。
インデックスが断片化しているかを調べる
まずはどのテーブルのどのインデックスが断片化しているかを調べる必要があります。
方法は以下のSQLを実行します。
SELECT
dm.index_id AS index_id
,name AS index_name
,object_name(dm.object_id) AS table_name
,fragment_count AS fragment_count
,avg_fragmentation_in_percent AS avg_fragmentation_in_percent
FROM
sys.dm_db_index_physical_stats (7, null,null, null, null) AS dm
JOIN sys.indexes AS ind ON
dm.object_id = ind.object_id
AND dm.index_id = ind.index_id
ORDER BY
avg_fragmentation_in_percent DESC
上記のSQLを実行すると断片化されたインデックスのテーブル名とそのインデックス名が表示されるので断片化された割合の大きなインデックスを再構築しましょう。
SQLServerで断片化したインデックスを再構築する方法
表示された結果から断片化の大きなインデックスを再構築する方法は以下のSQLを実行します。
ALTER INDEX [インデックス名] ON [テーブル名] REBUILD;
テーブルに設定されているインデックスすべてを再構築する場合は
ALTER INDEX ALL ON [テーブル名] REBUILD;
でOKです。
上記のSQLを実行するとインデックスが再構築され断片化の割合が0になります。
急にSQLのパフォーマンスが悪くなった時などは調べてみるとよいでしょう。
