SQL Server インデックスの断片化

http://d.hatena.ne.jp/haradago/20100305/p1
転記にも程があるけど元サイトが消えた時のためのメモ。

    • インデックスの断片化を調査するSQL

SELECT DB_NAME(database_id) as db_name
,OBJECT_NAME(object_id) as table_name
,(select min(name) from sys.indexes
where sys.indexes.object_id = sys.dm_db_index_physical_stats.object_id
and sys.indexes.index_id = sys.dm_db_index_physical_stats.index_id)as index_name
,index_type_desc
,avg_fragmentation_in_percent --断片化の割合
,fragment_count --インデックス内の断片化の数
,avg_fragment_size_in_pages --インデックス内の1つ断片化内の平均ページ数
FROM sys.dm_db_index_physical_stats
(DB_ID(),NULL, NULL, NULL , 'LIMITED');

    • インデックスの再構成(REORGANIZE)・・・既に割り当てられている領域を利用して断片化の解消を行う

ALTER INDEX idx_hoge ON tbl_hoge REORGANIZE

    • インデックスの再構築(REBUILD)・・・新規のページを使用して断片化の解消が行う

ALTER INDEX idx_hoge ON tbl_hoge REBUILD