DBCC INDEXDEFRAG (Transact-SQL)

更新 : 2006 年 4 月 14 日

指定されたテーブルまたはビューのインデックスを断片化解消します。

ms177571.note(ja-jp,SQL.90).gif重要 :
この機能は、将来のバージョンの Microsoft SQL Server では削除される予定です。新規の開発作業ではこの機能を使用しないようにし、現在この機能を使用しているアプリケーションは修正することを検討してください。代わりに ALTER INDEX を使用してください。

トピック リンク アイコンTransact-SQL 構文表記規則

構文

DBCC INDEXDEFRAG
(
    { database_name | database_id | 0 } 
        , { table_name | table_id | view_name | view_id } 
    [ , { index_name | index_id } [ , { partition_number | 0 } ] ]
)
    [ WITH NO_INFOMSGS ] 

引数

  • database_name | database_id | 0
    断片化解消するインデックスがあるデータベースを指定します。0 を指定すると、現在のデータベースが選択されます。データベース名は、識別子の規則に従っている必要があります。
  • table_name | table_id | view_name | view_id
    断片化を解消するインデックスがあるテーブルまたはビューを指定します。テーブル名とビュー名は、識別子の規則に従っている必要があります。
  • index_name | index_id
    断片化解消するインデックスの ID の名前です。インデックス ID を指定しないと、ステートメントは指定されたテーブルまたはビューのすべてのインデックスを断片化解消します。インデックス名は、識別子の規則に従っている必要があります。
  • partition_number | 0
    断片化を解消するインデックスのパーティション番号を指定します。パーティション番号を指定しない場合、またはパーティション番号に 0 を指定した場合、ステートメントは指定されたインデックス内のすべてのパーティションの断片化を解消します。
  • WITH NO_INFOMSGS
    重大度レベル 0 ~ 10 のすべての情報メッセージを表示しないようにします。

結果セット

DBCC INDEXDEFRAG は、(WITH NO_INFOMSGS が指定されている場合を除き) インデックスがステートメント内で指定されている場合に、次の結果セットを返します (値は異なることがあります)。

Pages Scanned Pages Moved Pages Removed
------------- ----------- -------------
359           346         8

(1 row(s) affected)

DBCC execution completed. If DBCC printed error messages, contact your system administrator.

解説

DBCC INDEXDEFRAG は、リーフ ページの物理順序がリーフ ノードでの左から右への論理順序と一致するように、インデックスのリーフ レベルの断片化を解消するので、インデックスのスキャンのパフォーマンスが向上します。

ms177571.note(ja-jp,SQL.90).gifメモ :
DBCC INDEXDEFRAG が実行されると、インデックスの断片化解消が直列に実行されます。つまり、単一のスレッドを使用して、単一のインデックスについて操作が実行されます。並列処理は実行されません。また、同じ DBCC INDEXDEFRAG ステートメントからの複数のインデックスについての操作は、1 つのインデックスについて同時に実行されます。

また、DBCC INDEXDEFRAG は、インデックス作成時に指定された FILL FACTOR を考慮しながら、インデックスのページの圧縮も行います。この圧縮によって作成された空のページは削除されます。詳細については、「FILL FACTOR」を参照してください。

インデックスが複数のファイルにわたる場合は、DBCC INDEXDEFRAG は一度に 1 つのファイルに対して断片化の解消を行います。ページがファイル間を移動することはありません。

DBCC INDEXDEFRAG は、5 分ごとに、完了した割合の予測値をレポートします。DBCC INDEXDEFRAG は、プロセスのどの時点でも停止することができ、停止時に完了していた作業は保持されます。

DBCC DBREINDEX (または一般のインデックス構築操作) とは異なり、DBCC INDEXDEFRAG はオンライン操作です。この操作では、長期間にわたってロックを保持することはありません。したがって、DBCC INDEXDEFRAG はクエリまたは更新の実行をブロックしません。断片化解消の所要時間は断片化のレベルに関係するため、比較的断片化されていないインデックスの断片化解消は、新しいインデックスの構築にかかる時間よりも短時間で済む場合があります。断片化がかなり進んでいるインデックスの場合、断片化を解消すると、再構築するよりも所用時間が著しく長くなる場合があります。

断片化解消は、データベース復旧モデルの設定にかかわらず、常にすべてログに記録されます。詳細については、「ALTER DATABASE (Transact-SQL)」を参照してください。断片化がかなり進んだインデックスの断片化を解消した場合、インデックスの作成をすべてログに記録したときよりも多くのログが生成される可能性があります。ただし、ログのバックアップが頻繁に作成されているか、または復旧モデルに SIMPLE が設定されている場合、断片化解消は一連の短いトランザクションとして実行されるため大量のログは必要なくなります。

DBCC INDEXDEFRAG は、インデックス リーフ ページの再編成を行います。したがって、特定のインデックスがディスク上の他のインデックスと交互に配置されている場合は、そのインデックスに対して DBCC INDEXDEFRAG を実行すると、隣接するインデックス内では一部のリーフ ページが作成されません。ページが連続して配置されるようにするには、インデックスを再構築します。

DBCC INDEXDEFRAG は、無効化されたインデックスまたはページ ロックが OFF に設定されているインデックスの断片化解消には使用できません。DBCC INDEXDEFRAG は、システム テーブルに対して使用できません。

権限

呼び出し元はテーブルを所有しているか、固定サーバー ロール sysadmin、固定データベース ロール db_owner、または固定データベース ロール db_ddladmin のメンバである必要があります。

次の例では、AdventureWorks データベースの Production.Product テーブルにある PK_Product_ProductID インデックスのすべてのパーティションの断片化を解消します。

DBCC INDEXDEFRAG (AdventureWorks, "Production.Product", PK_Product_ProductID)
GO

参照

関連項目

DBCC (Transact-SQL)
sys.dm_db_index_physical_stats
CREATE TABLE (Transact-SQL)
ALTER TABLE (Transact-SQL)
ALTER INDEX (Transact-SQL)

その他の技術情報

テーブルとインデックスのアーキテクチャ

ヘルプおよび情報

SQL Server 2005 の参考資料の入手

変更履歴

リリース 履歴

2006 年 4 月 14 日

変更内容 :
  • 構文を修正し、インデックスおよびパーティション番号の句が省略可能であることを示しました。