インデックス DDL 操作に必要なディスク領域Disk Space Requirements for Index DDL Operations

適用対象: ○SQL Server XAzure SQL Database XAzure SQL Data Warehouse XParallel Data WarehouseAPPLIES TO: yesSQL Server noAzure SQL Database noAzure SQL Data Warehouse noParallel Data Warehouse

ディスク領域は、インデックスを作成、再構築、または削除するときの重要な検討事項です。Disk space is an important consideration when you create, rebuild, or drop indexes. ディスク領域が不足すると、パフォーマンスが低下したり、インデックス操作が失敗したりする場合があります。Inadequate disk space can degrade performance or even cause the index operation to fail. このトピックでは、インデックス DDL (データ定義言語) 操作に必要なディスク領域を判断するのに役立つ一般的な情報を提供します。This topic provides general information that can help you determine the amount of disk space required for index data definition language (DDL) operations.

追加のディスク領域を必要としないインデックス操作Index Operations That Require No Additional Disk Space

次のインデックス操作では、追加のディスク領域は必要ありません。The following index operations require no additional disk space:

  • ALTER INDEX REORGANIZE (ただし、ログ領域は必要です)ALTER INDEX REORGANIZE; however, log space is required.

  • DROP INDEX (非クラスター化インデックスを削除している場合)DROP INDEX when you are dropping a nonclustered index.

  • DROP INDEX (MOVE TO 句を指定せずにオフラインでクラスター化インデックスを削除していて、非クラスター化インデックスが存在しない場合)DROP INDEX when you are dropping a clustered index offline without specifying the MOVE TO clause and nonclustered indexes do not exist.

  • CREATE TABLE (PRIMARY KEY 制約または UNIQUE 制約)CREATE TABLE (PRIMARY KEY or UNIQUE constraints)

追加のディスク領域が必要なインデックス操作Index Operations That Require Additional Disk Space

他のすべてのインデックス DDL 操作では、操作中に使用する一時ディスク領域と、新しいインデックス構造を格納する永続的なディスク領域が追加で必要になります。All other index DDL operations require additional temporary disk space to use during the operation, and permanent disk space to store the new index structure or structures.

新しいインデックス構造を作成する場合、古い (作成元の) 構造と新しい (作成先の) 構造の両方を格納するディスク領域が、それぞれ適切なファイルおよびファイル グループで必要になります。When a new index structure is created, disk space for both the old (source) and new (target) structures is required in their appropriate files and filegroups. 古い構造の割り当ては、インデックス作成トランザクションがコミットされるまで解除されません。The old structure is not deallocated until the index creation transaction commits.

次のインデックス DDL 操作では、新しいインデックス構造が作成され、追加のディスク領域が必要になります。The following index DDL operations create new index structures and require additional disk space:

  • CREATE INDEXCREATE INDEX

  • CREATE INDEX WITH DROP_EXISTINGCREATE INDEX WITH DROP_EXISTING

  • ALTER INDEX REBUILDALTER INDEX REBUILD

  • ALTER TABLE ADD CONSTRAINT (PRIMARY KEY または UNIQUE)ALTER TABLE ADD CONSTRAINT (PRIMARY KEY or UNIQUE)

  • ALTER TABLE DROP CONSTRAINT (PRIMARY KEY または UNIQUE) (制約がクラスター化インデックスに基づいている場合)ALTER TABLE DROP CONSTRAINT (PRIMARY KEY or UNIQUE) when the constraint is based on a clustered index

  • DROP INDEX MOVE TO (クラスター化インデックスのみ該当)DROP INDEX MOVE TO (Applies only to clustered indexes.)

並べ替え用の一時ディスク領域Temporary Disk Space for Sorting

作成元の構造と作成先の構造を格納するために必要なディスク領域以外に、並べ替えに使用する一時ディスク領域も必要になります。ただし、クエリ オプティマイザーにより、並べ替えを必要としない実行プランが検出された場合は除きます。Besides the disk space required for the source and target structures, temporary disk space is required for sorting, unless the query optimizer finds an execution plan that does not require sorting.

並べ替えが必要な場合、一度に 1 つの新しいインデックスに対して並べ替えが実行されます。If sorting is required, sorting occurs one new index at a time. たとえば、1 つのステートメント内でクラスター化インデックスと関連する非クラスター化インデックスを再構築すると、インデックスは順番に並べ替えられます。For example, when you rebuild a clustered index and associated nonclustered indexes within a single statement, the indexes are sorted one after the other. したがって、並べ替えに必要な追加の一時ディスク領域のサイズは、並べ替えるインデックスの中で最も大きなインデックスのサイズと同じサイズになります。Therefore, the additional temporary disk space that is required for sorting only has to be as large as the largest index in the operation. 通常は、クラスター化インデックスのサイズが最も大きくなります。This is almost always the clustered index.

SORT_IN_TEMPDB オプションを ON に設定した場合は、最も大きいインデックスのサイズが tempdbのサイズを超えないようにする必要があります。If the SORT_IN_TEMPDB option is set to ON, the largest index must fit into tempdb. このオプションを使用すると、インデックスの作成に使用する一時ディスク領域は増えますが、 tempdb がユーザー データベースとは異なるディスク セットにある場合、インデックスの作成に必要な時間を短縮できることがあります。Although this option increases the amount of temporary disk space that is used to create an index, it may reduce the time that is required to create an index when tempdb is on a set of disks different from the user database.

SORT_IN_TEMPDB を OFF (既定) に設定した場合、パーティション インデックスを含む各インデックスは、作成先のディスク領域で並べ替えられます。この場合、必要になるのは新しいインデックス構造のディスク領域のみです。If SORT_IN_TEMPDB is set to OFF (the default) each index, including partitioned indexes, is sorted in its destination disk space; and only the disk space for the new index structures is required.

ディスク領域の計算例については、「 インデックスのディスク領域の例」をご覧ください。For an example of calculating disk space, see Index Disk Space Example.

オンライン インデックス操作用の一時ディスク領域Temporary Disk Space for Online Index Operations

インデックス操作をオンラインで実行する場合、追加の一時ディスク領域が必要になります。When you perform index operations online, additional temporary disk space is required.

クラスター化インデックスをオンラインで作成、再構築、または削除すると、古いブックマークを新しいブックマークにマップする非クラスター化インデックスが一時的に作成されます。If a clustered index is created, rebuilt, or dropped online, a temporary nonclustered index is created to map old bookmarks to new bookmarks. SORT_IN_TEMPDB オプションを ON に設定した場合、この一時インデックスは tempdbに作成されます。If the SORT_IN_TEMPDB option is set to ON, this temporary index is created in tempdb. SORT_IN_TEMPDB を OFF に設定した場合は、新しいインデックスと同じファイル グループまたはパーティション構成が使用されます。If SORT_IN_TEMPDB is set to OFF, the same filegroup or partition scheme as the target index is used. 一時マッピング インデックスには、テーブルの行ごとに 1 つのレコードが格納されます。レコードの内容は、古いブックマーク列と新しいブックマーク列を組み合わせたもので、uniqueifier とレコード識別子が含まれます。両方のブックマークで使用されている列のコピーは 1 つしか含まれません。The temporary mapping index contains one record for each row in the table, and its contents is the union of the old and new bookmark columns, including uniqueifiers and record identifiers and including only a single copy of any column used in both bookmarks. オンラインでのインデックス操作の詳細については、「 オンラインでのインデックス操作の実行」を参照してください。For more information about online index operations, see Perform Index Operations Online.

注意

SORT_IN_TEMPDB オプションは、DROP INDEX ステートメントには設定できません。The SORT_IN_TEMPDB option cannot be set for DROP INDEX statements. 一時マッピング インデックスは、常に新しいインデックスと同じファイル グループまたはパーティション構成に作成されます。The temporary mapping index is always created in the same filegroup or partition scheme as the target index.

オンライン インデックス操作では、行のバージョン管理を使用して、他のトランザクションによる変更がインデックス操作に影響を与えないようにしています。Online index operations use row versioning to isolate the index operation from the effects of modifications made by other transactions. そのため、読み取った行の共有ロックを要求する必要がなくなります。This avoids the need for requesting share locks on rows that have been read. オンライン インデックス操作と同時にユーザーの更新操作と削除操作を実行するには、 tempdbにバージョン レコード用の領域が必要になります。Concurrent user update and delete operations during online index operations require space for version records in tempdb. 詳細については、「 オンラインでのインデックス操作の実行 」を参照してください。For more information, see Perform Index Operations Online .

インデックスのディスク領域の例Index Disk Space Example

インデックス操作用のトランザクション ログのディスク領域Transaction Log Disk Space for Index Operations

テーブル サイズの見積もりEstimate the Size of a Table

クラスター化インデックスのサイズの見積もりEstimate the Size of a Clustered Index

非クラスター化インデックスのサイズの算出Estimate the Size of a Nonclustered Index

ヒープ サイズの見積もりEstimate the Size of a Heap

CREATE INDEX (Transact-SQL)CREATE INDEX (Transact-SQL)

ALTER INDEX (Transact-SQL)ALTER INDEX (Transact-SQL)

DROP INDEX (Transact-SQL)DROP INDEX (Transact-SQL)

インデックスの FILL FACTOR の指定Specify Fill Factor for an Index

インデックスの再編成と再構築Reorganize and Rebuild Indexes