インデックスの断片化状況を調べる

毎回、インデックスの断片化状況を調べる方法を忘れるのでメモしておきます。以下の SQL を実行すれば、一定の割合 (以下では 3 %) 以上断片化したインデックスの名称がわかります。表示する断片化率の閾値を変更するには、 avg_fragmentation_in_percent と比較している値を変更してください。

SELECT
    a.index_id
    , name
    , avg_fragmentation_in_percent 
FROM
    sys.dm_db_index_physical_stats( 
        DB_ID()
        , NULL
        , NULL
        , NULL
        , NULL
    ) AS a JOIN sys.indexes AS b 
        ON a.object_id = b.object_id 
        AND a.index_id = b.index_id 
WHERE
    avg_fragmentation_in_percent > 3
    AND a.index_id > 0;

インデックスの最適化 (再構築、再構成) の前に断片化状況を記録しておくと、最適化後と比較が出来るのでおすすめです。