SQLServerで断片化したインデックスを再構築する方法

プログラミング SQL Server

SQLServerで断片化したインデックスが発生するとSQLのパフォーマンスが遅くなることがあります。

断片化したインデックスを再構築しインデックスるの断片化を解消する方法です。

スポンサーリンク

SQLServerの断片化したインデックスを検索する方法

まずはどのテーブルのどのインデックスが断片化しているかを調べる必要があります。

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

追記

インデックスの断片化が解消されないパターンもあるようです。
詳細は追加調査が必要です。

タイトルとURLをコピーしました