インデックスの断片化の情報を調べるのは以下の通り。
SELECT name as インデックス名, object_name(dm.object_id) as テーブル名, avg_fragmentation_in_percent as フラグメンテーション率 FROM sys.dm_db_index_physical_stats (DB_ID(), 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
フラグメンテーション率が高い場合は断片化の解消を検討したほうがよい。
解消するにはALTER INDEXを使用するとよい。DBCCでも解消できるが非推奨となっている。
インデックスの再構築を行う。再構築中はテーブルにロックがかかる。
ALTER INDEX ALL ON テーブル名 REBUILD
以下、非推奨のやり方。以前のバージョンの場合はこのコマンドを使う必要があるかも。
インデックスの断片化の情報を調べる。
DBCC SHOWCONTIG (テーブル名)
スキャン密度、論理スキャンの断片化、エクステントスキャンの断片化に問題がある場合は断片化の解消を検討したほうがよい。
インデックスの再構築を行う。再構築中はテーブルにロックがかかる。
DBCC DBREINDEX (テーブル名)
インデックスの断片化の解消を行う。実行中にロックはかからないが、効果はDBCC DBREINDEX の方が高い。
DBCC INDEXDEFRAG (テーブル名)
以前も似たような記事を書いていたのでメモ
動作確認環境:SQLServer 2008