DBCC DBREINDEX (Transact-SQL)
適用対象: SQL Server Azure SQL Managed Instance
指定されたデータベース内のテーブルの 1 つ以上のインデックスを再構築します。
重要
この機能は、 SQL Serverの将来のバージョンで削除される予定です。 新規の開発作業ではこの機能を使用しないようにし、現在この機能を使用しているアプリケーションは修正することを検討してください。 代わりに、ALTER INDEX を使用してください。
適用対象: SQL Server 2008 (10.0.x) 以降のバージョン。
構文
DBCC DBREINDEX
(
table_name
[ , index_name [ , fillfactor ] ]
)
[ WITH NO_INFOMSGS ]
引数
table_name
再構築を指定するインデックスが含まれているテーブルの名前。 テーブル名は識別子の規則に従っている必要があります。
index_name
再構築するインデックスの名前。 インデックス名は、識別子の規則に従っている必要があります。 index_name が指定されている場合、table_name を指定する必要があります。 index_name を指定しない場合、または ' '
と指定した場合は、テーブルのすべてのインデックスが再構築されます。
fillfactor
インデックスの作成時または再構築時に、データを格納する各インデックス ページの領域の割合。 fillfactor は、インデックスが作成されたときの FILL FACTOR を置き換え、そのインデックス、およびクラスター化インデックスが再構築されたために再構築される他の非クラスター化インデックスに対する、新しい既定値になります。
fillfactor が 0 の場合、DBCC DBREINDEX
はインデックスに対して最後に指定された FILL FACTOR の値を使用します。 この値は、sys.indexes
カタログ ビューに格納されます。
fillfactor が指定されている場合、table_name と index_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 INDEX
と CREATE INDEX
ステートメントをアトミックにするには、トランザクションに含める必要があります。 また、DBCC DBREINDEX
を使用する方が、DROP INDEX
と CREATE 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. すべてのインデックスを再構築する
次の例では、Employee
の AdventureWorks2022
テーブルのすべてのインデックスを、FILL FACTOR 値 70
で再構築します。
USE AdventureWorks2022;
GO
DBCC DBREINDEX ('HumanResources.Employee', ' ', 70);
GO