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のパフォーマンスが悪くなった時などは調べてみるとよいでしょう。