次の方法で共有


DBCC DBREINDEX (Transact-SQL)

適用対象:SQL ServerAzure SQL Managed Instance

指定されたデータベース内のテーブルの 1 つ以上のインデックスを再構築します。

重要

この機能は、Microsoft SQL Server の将来のバージョンで削除されます。 新規の開発作業ではこの機能を使用しないようにし、現在この機能を使用しているアプリケーションは修正することを検討してください。 代わりに、ALTER INDEX を使用してください。

適用対象: SQL Server 2008 (10.0.x) 以降のバージョン。

Transact-SQL 構文表記規則

構文

DBCC DBREINDEX
(
    table_name
    [ , index_name [ , fillfactor ] ]
)
    [ WITH NO_INFOMSGS ]

Note

SQL Server 2014 以前の Transact-SQL 構文を確認するには、以前のバージョンのドキュメントを参照してください。

引数

table_name

再構築を指定するインデックスが含まれているテーブルの名前。 テーブル名は識別子の規則に従っている必要があります。

index_name

再構築するインデックスの名前。 インデックス名は、識別子の規則に従っている必要があります。 index_name が指定されている場合、table_name を指定する必要があります。 index_name を指定しない場合、または ' ' と指定した場合は、テーブルのすべてのインデックスが再構築されます。

fillfactor

インデックスの作成時または再構築時に、データを格納する各インデックス ページの領域の割合。 fillfactor は、インデックスが作成されたときの FILL FACTOR を置き換え、そのインデックス、およびクラスター化インデックスが再構築されたために再構築される他の非クラスター化インデックスに対する、新しい既定値になります。

fillfactor が 0 の場合、DBCC DBREINDEX はインデックスに対して最後に指定された FILL FACTOR の値を使用します。 この値は、sys.indexes カタログ ビューに格納されます。

fillfactor が指定されている場合、table_nameindex_name を指定する必要があります。 fillfactor が指定されていない場合は、既定の FILL FACTOR である 100 が使用されます。 詳細については、「 インデックスの FILL FACTOR の指定」を参照してください。

WITH NO_INFOMSGS

重大度レベル 0 から 10 のすべての情報メッセージを表示しないようにします。

解説

DBCC DBREINDEX は、テーブルの 1 つのインデックス、またはテーブルに対して定義されているすべてのインデックスを再構築します。 インデックスを動的に再構築できれば、PRIMARY KEY 制約または UNIQUE 制約を削除して再作成しなくても、それらの制約を強制しているインデックスを再構築できます。 したがって、テーブルの構造やその制約がわからない場合でも、インデックスを再構築することができます。 インデックスの再構築は、テーブルにデータを一括コピーした後に実行できます。

DBCC DBREINDEX では、1 つのステートメントでテーブルのすべてのインデックスを再構築できます。 これは複数の DROP INDEX および CREATE INDEX ステートメントをコーディングするより簡単です。 DBCC DBREINDEX は、1 つのステートメントで処理が実行されるため、自動的にアトミックになります。これに対し、個別の DROP INDEXCREATE INDEX ステートメントをアトミックにするには、トランザクションに含める必要があります。 また、DBCC DBREINDEX を使用する方が、DROP INDEXCREATE INDEX ステートメントを個別に使用するより最適化されます。

DBCC INDEXDEFRAG や、REORGANIZE オプションを使用した ALTER INDEX とは異なり、DBCC DBREINDEX はオフライン操作です。 非クラスター化インデックスを再構築する場合、操作中は、該当のテーブルに対して共有ロックが保持されます。 これにより、テーブルが変更されなくなります。 クラスター化インデックスを再構築する場合は、排他テーブル ロックが保持されます。 これにより、テーブルに一切アクセスできなくなり、実質的にテーブルはオフラインになります。 インデックスの再構築をオンラインで実行したり、インデックスの再構築操作中に並列処理の次数を制御したりするには、ALTER INDEX REBUILD ステートメントと ONLINE オプションを使用します。

インデックスを再構築または再構成する方法の選択の詳細については、「インデックスの再構成と再構築」を参照してください。

制限

DBCC DBREINDEX は、次のオブジェクトを使うときはサポートされません。

  • システム テーブル
  • 空間インデックス
  • メモリ最適化列ストア インデックス

結果セット

NO_INFOMSGS を指定しない限り (テーブル名の指定は必要)、DBCC DBREINDEX は常に以下を返します。

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

アクセス許可

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

A. インデックスを再構築する

次の例では、AdventureWorks2022 データベースの Employee テーブルで、Employee_EmployeeID クラスター化インデックスを FILL FACTOR 80 で再構築します。

USE AdventureWorks2022;
GO
DBCC DBREINDEX ('HumanResources.Employee', PK_Employee_BusinessEntityID, 80);
GO

B. すべてのインデックスを再構築する

次の例では、EmployeeAdventureWorks2022 テーブルのすべてのインデックスを、FILL FACTOR 値 70 で再構築します。

USE AdventureWorks2022;
GO
DBCC DBREINDEX ('HumanResources.Employee', ' ', 70);
GO

こちらもご覧ください