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

適用対象: ○SQL Server (2008 以降)○Azure SQL Database○Azure SQL Data Warehouse ○Parallel Data Warehouse THIS TOPIC APPLIES TO: yesSQL Server (starting with 2008)yesAzure SQL DatabaseyesAzure SQL Data Warehouse yesParallel Data Warehouse

インデックスの無効化、再構築、再構成によって、またはインデックスに関するオプションの設定によって、既存のテーブルやビュー インデックス (リレーショナルまたは XML) を変更します。Modifies an existing table or view index (relational or XML) by disabling, rebuilding, or reorganizing the index; or by setting options on the index.

トピック リンク アイコン Transact-SQL 構文表記規則Topic link icon Transact-SQL Syntax Conventions

構文Syntax

-- Syntax for SQL Server and SQL Database

ALTER INDEX { index_name | ALL } ON <object>  
{  
      REBUILD {  
            [ PARTITION = ALL ] [ WITH ( <rebuild_index_option> [ ,...n ] ) ]   
          | [ PARTITION = partition_number [ WITH ( <single_partition_rebuild_index_option> ) [ ,...n ] ]  
      }  
    | DISABLE  
    | REORGANIZE  [ PARTITION = partition_number ] [ WITH ( <reorganize_option>  ) ]  
    | SET ( <set_index_option> [ ,...n ] )   
    | RESUME [WITH (<resumable_index_options>,[…n])]
    | PAUSE
    | ABORT
}  
[ ; ]  

<object> ::=   
{  
    [ database_name. [ schema_name ] . | schema_name. ]   
    table_or_view_name  
}  

<rebuild_index_option > ::=  
{  
      PAD_INDEX = { ON | OFF }  
    | FILLFACTOR = fillfactor   
    | SORT_IN_TEMPDB = { ON | OFF }  
    | IGNORE_DUP_KEY = { ON | OFF }  
    | STATISTICS_NORECOMPUTE = { ON | OFF }  
    | STATISTICS_INCREMENTAL = { ON | OFF }  
    | ONLINE = {   
          ON [ ( <low_priority_lock_wait> ) ]   
        | OFF } 
    | RESUMABLE = { ON | OFF } 
    | MAX_DURATION = <time> [MINUTES}     
    | ALLOW_ROW_LOCKS = { ON | OFF }  
    | ALLOW_PAGE_LOCKS = { ON | OFF }  
    | MAXDOP = max_degree_of_parallelism  
    | COMPRESSION_DELAY = {0 | delay [Minutes]}  
    | DATA_COMPRESSION = { NONE | ROW | PAGE | COLUMNSTORE | COLUMNSTORE_ARCHIVE }   
        [ ON PARTITIONS ( {<partition_number> [ TO <partition_number>] } [ , ...n ] ) ]  
}  

<single_partition_rebuild_index_option> ::=  
{  
      SORT_IN_TEMPDB = { ON | OFF }  
    | MAXDOP = max_degree_of_parallelism  
    | RESUMABLE = { ON | OFF } 
    | MAX_DURATION = <time> [MINUTES}     
    | DATA_COMPRESSION = { NONE | ROW | PAGE | COLUMNSTORE | COLUMNSTORE_ARCHIVE} }  
    | ONLINE = { ON [ ( <low_priority_lock_wait> ) ] | OFF }  
}  

<reorganize_option>::=  
{  
       LOB_COMPACTION = { ON | OFF }  
    |  COMPRESS_ALL_ROW_GROUPS =  { ON | OFF}  
}  

<set_index_option>::=  
{  
      ALLOW_ROW_LOCKS = { ON | OFF }  
    | ALLOW_PAGE_LOCKS = { ON | OFF }  
    | IGNORE_DUP_KEY = { ON | OFF }  
    | STATISTICS_NORECOMPUTE = { ON | OFF }  
    | COMPRESSION_DELAY= {0 | delay [Minutes]}  
}  

<resumable_index_option> ::=
 { 
    MAXDOP = max_degree_of_parallelism
    | MAX_DURATION =<time> [MINUTES]
    | <low_priority_lock_wait>  
 }

<low_priority_lock_wait>::=  
{  
    WAIT_AT_LOW_PRIORITY ( MAX_DURATION = <time> [ MINUTES ] ,   
                          ABORT_AFTER_WAIT = { NONE | SELF | BLOCKERS } )  
}  
-- Syntax for SQL Data Warehouse and Parallel Data Warehouse  

ALTER INDEX { index_name | ALL }  
    ON   [ schema_name. ] table_name  
{  
      REBUILD {  
            [ PARTITION = ALL [ WITH ( <rebuild_index_option> ) ] ] 
          | [ PARTITION = partition_number [ WITH ( <single_partition_rebuild_index_option> )] ] 
      }  
    | DISABLE  
    | REORGANIZE [ PARTITION = partition_number ]  
}  
[;]  

<rebuild_index_option > ::=   
{  
    DATA_COMPRESSION = { COLUMNSTORE | COLUMNSTORE_ARCHIVE }
        [ ON PARTITIONS ( {<partition_number> [ TO <partition_number>] } [ , ...n ] ) ]   
}

<single_partition_rebuild_index_option > ::=   
{  
    DATA_COMPRESSION = { COLUMNSTORE | COLUMNSTORE_ARCHIVE }  
}  

引数Arguments

index_nameindex_name
インデックスの名前。Is the name of the index. インデックス名は、テーブルまたはビュー内では一意である必要がありますが、データベース内で一意である必要はありません。Index names must be unique within a table or view but do not have to be unique within a database. インデックス名の規則に従う必要があります識別子です。Index names must follow the rules of identifiers.

ALLALL
インデックスの種類に関係なく、テーブルまたはビューに関連付けられているすべてのインデックスを指定します。Specifies all indexes associated with the table or view regardless of the index type. 1 つ以上のインデックスがオフラインまたは読み取り専用のファイル グループにあるか、指定した操作が 1 つ以上のインデックスの種類に許可されていない場合、ALL を指定するとステートメントは失敗します。Specifying ALL causes the statement to fail if one or more indexes are in an offline or read-only filegroup or the specified operation is not allowed on one or more index types. 次の表は、インデックス操作と、許可されないインデックスの種類の一覧です。The following table lists the index operations and disallowed index types.

この操作をすべて、キーワードを使用します。Using the keyword ALL with this operation テーブル内に存在すると操作が失敗するインデックスの種類Fails if the table has one or more
REBUILD WITH ONLINE = ONREBUILD WITH ONLINE = ON XML インデックスXML index

空間インデックスSpatial index

列ストア インデックス:に適用されます: SQL Server (SQL Server 2012 以降) と Azure SQL データベースです。Columnstore index: Applies to: SQL Server (starting with SQL Server 2012) and Azure SQL Database.
REBUILD PARTITION = partition_numberREBUILD PARTITION = partition_number 非パーティション インデックス、XML インデックス、空間インデックス、または無効化されたインデックスNonpartitioned index, XML index, spatial index, or disabled index
REORGANIZEREORGANIZE ALLOW_PAGE_LOCKS が OFF に設定されたインデックスIndexes with ALLOW_PAGE_LOCKS set to OFF
パーティションの再編成 = partition_numberREORGANIZE PARTITION = partition_number 非パーティション インデックス、XML インデックス、空間インデックス、または無効化されたインデックスNonpartitioned index, XML index, spatial index, or disabled index
IGNORE_DUP_KEY = ONIGNORE_DUP_KEY = ON XML インデックスXML index

空間インデックスSpatial index

列ストア インデックス:に適用されます: SQL Server (SQL Server 2012 以降) と Azure SQL データベースです。Columnstore index: Applies to: SQL Server (starting with SQL Server 2012) and Azure SQL Database.
ONLINE = ONONLINE = ON XML インデックスXML index

空間インデックスSpatial index

列ストア インデックス:に適用されます: SQL Server (SQL Server 2012 以降) と Azure SQL データベースです。Columnstore index: Applies to: SQL Server (starting with SQL Server 2012) and Azure SQL Database.
再開可能な = ONRESUMABLE = ON サポートされていません、再開可能なインデックスすべてキーワード。Resumable indexes not supported with All keyword.

適用されます: SQL Server 2017、および Azure SQL データベース (機能が公開プレビュー) で始まるApplies to: Beginning with SQL Server 2017 and Azure SQL Database (feature is in public preview)
警告

詳細についてはオンラインで実行できるインデックス操作についてを参照してください。オンライン インデックス操作のガイドラインです。For more detailed information about index operations that can be performed online, see Guidelines for Online Index Operations.

パーティションで ALL を指定した場合、= partition_number、すべてのインデックスを固定する必要があります。If ALL is specified with PARTITION = partition_number, all indexes must be aligned. つまり、すべてのインデックスは、等価パーティション関数に基づいてパーティション分割されます。This means that they are partitioned based on equivalent partition functions. パーティションを持つすべてを使用すると、同じすべてのインデックス パーティションとpartition_numberを再構築または再構成します。Using ALL with PARTITION causes all index partitions with the same partition_number to be rebuilt or reorganized. パーティション インデックスの詳細については、「 Partitioned Tables and Indexes」を参照してください。For more information about partitioned indexes, see Partitioned Tables and Indexes.

database_namedatabase_name
データベースの名前です。Is the name of the database.

schema_nameschema_name
テーブルまたはビューが属するスキーマの名前を指定します。Is the name of the schema to which the table or view belongs.

table_or_view_nametable_or_view_name
インデックスに関連付けられているテーブルまたはビューの名前を指定します。Is the name of the table or view associated with the index. 表示するには、インデックスのレポート オブジェクトを使用して、 sys.indexesカタログ ビューです。To display a report of the indexes on an object, use the sys.indexes catalog view.

SQL データベースには、3 部構成の名前形式 database_name がサポートしています。[schema_name] .table_or_view_name、database_name が現在のデータベースまたは database_name が tempdb であり、table_or_view_name が # で始まる。SQL Database supports the three-part name format database_name.[schema_name].table_or_view_name when the database_name is the current database or the database_name is tempdb and the table_or_view_name starts with #.

再構築 [WITH (<rebuild_index_option > [ .n]) ]REBUILD [ WITH (<rebuild_index_option> [ ,... n]) ]
同じ列、インデックスの種類、一意性属性、および並べ替え順に従って、インデックスを再構築します。Specifies the index will be rebuilt using the same columns, index type, uniqueness attribute, and sort order. この句は等価DBCC DBREINDEXです。This clause is equivalent to DBCC DBREINDEX. REBUILD では、無効化されたインデックスが有効になります。REBUILD enables a disabled index. クラスター化インデックスを再構築しても、キーワード ALL を指定しない限り、関連付けられている非クラスター化インデックスは再構築されません。Rebuilding a clustered index does not rebuild associated nonclustered indexes unless the keyword ALL is specified. 既存のインデックス オプションで格納されている値をインデックス オプションが指定されていない場合sys.indexes適用されます。If index options are not specified, the existing index option values stored in sys.indexes are applied. 値が格納されていないインデックス オプションについてsys.indexesオプションの引数の定義に示されている既定値が適用されます。For any index option whose value is not stored in sys.indexes, the default indicated in the argument definition of the option applies.

ALL を指定した場合で、基になるテーブルがヒープの場合、テーブルは再構築操作の影響を受けません。If ALL is specified and the underlying table is a heap, the rebuild operation has no effect on the table. テーブルに関連付けられている非クラスター化インデックスは再構築されます。Any nonclustered indexes associated with the table are rebuilt.

データベース復旧モデルが一括ログ復旧モデルまたは単純復旧モデルのいずれかに設定されている場合、再構築操作のログへの記録は最小限にできます。The rebuild operation can be minimally logged if the database recovery model is set to either bulk-logged or simple.

注意

プライマリ XML インデックスを再構築するとき、基になるユーザー テーブルはインデックス操作の間使用できなくなります。When you rebuild a primary XML index, the underlying user table is unavailable for the duration of the index operation.

適用されます: SQL Server (SQL Server 2012 以降) と Azure SQL データベースです。Applies to: SQL Server (starting with SQL Server 2012) and Azure SQL Database.

列ストア インデックスの場合、再構築操作。For columnstore indexes, the rebuild operation:

  1. 並べ替え順序を使用しません。Does not use the sort order.

  2. 再構築が行われている間、テーブルまたはパーティションを排他的にロックします。Acquires an exclusive lock on the table or partition while the rebuild occurs. データは、NOLOCK、RCSI または SI を使用する場合でも、「オフライン」であり、再構築中に使用できません。The data is “offline” and unavailable during the rebuild, even when using NOLOCK, RCSI, or SI.

  3. すべてのデータを列ストアに再圧縮します。Re-compresses all data into the columnstore. 再構築が行われている間、列ストア インデックスのコピーが 2 つ存在します。Two copies of the columnstore index exist while the rebuild is taking place. 再構築が完了したら、 SQL ServerSQL Server により、元の列ストア インデックスが削除されます。When the rebuild is finished, SQL ServerSQL Server deletes the original columnstore index.

    列ストア インデックスの再構築の詳細については、次を参照してください列ストア インデックスの最適化。For more information about rebuilding columnstore indexes, see Columnstore indexes - defragmentation

PARTITIONPARTITION

適用されます: SQL Server (SQL Server 2008 以降) と Azure SQL データベースです。Applies to: SQL Server (starting with SQL Server 2008) and Azure SQL Database.

インデックスの 1 つのパーティションのみを再構築または再構成します。Specifies that only one partition of an index will be rebuilt or reorganized. パーティションを指定できませんindex_nameパーティション インデックスではありません。PARTITION cannot be specified if index_name is not a partitioned index.

PARTITION = ALL により、すべてのパーティションが再構築されます。PARTITION = ALL rebuilds all partitions.

警告

固定されていないインデックスをパーティションが 1, 000 個以上あるテーブルに作成または再構築することは可能ですが、サポートされていません。Creating and rebuilding nonaligned indexes on a table with more than 1,000 partitions is possible, but is not supported. このような操作を行うと、操作中にパフォーマンスが低下したりメモリが過度に消費される可能性があります。Doing so may cause degraded performance or excessive memory consumption during these operations. パーティションの数が 1, 000 個を超えた場合は、固定されたインデックスのみを使用することをお勧めします。We recommend using only aligned indexes when the number of partitions exceed 1,000.

partition_numberpartition_number

適用されます: SQL Server (SQL Server 2008 以降) と Azure SQL データベースです。Applies to: SQL Server (starting with SQL Server 2008) and Azure SQL Database.

再構築または再構成するパーティション インデックスのパーティション番号を指定します。Is the partition number of a partitioned index that is to be rebuilt or reorganized. partition_number変数を参照できる定数式です。partition_number is a constant expression that can reference variables. ユーザー定義型の変数または関数およびユーザー定義関数を含むこれらは参照できませんが、 Transact-SQLTransact-SQLステートメントです。These include user-defined type variables or functions and user-defined functions, but cannot reference a Transact-SQLTransact-SQL statement. partition_number存在する必要がありますと、ステートメントは失敗します。partition_number must exist or the statement fails.

(<Single_partition_rebuild_index_option >)WITH (<single_partition_rebuild_index_option>)

適用されます: SQL Server (SQL Server 2008 以降) と Azure SQL データベースです。Applies to: SQL Server (starting with SQL Server 2008) and Azure SQL Database.

SORT_IN_TEMPDB、MAXDOP、および DATA_COMPRESSION は、1 つのパーティションを再構築するときに指定できるオプションを示します (パーティション = n )。SORT_IN_TEMPDB, MAXDOP, and DATA_COMPRESSION are the options that can be specified when you rebuild a single partition (PARTITION = n). XML インデックスは、単一のパーティションの再構築操作では指定できません。XML indexes cannot be specified in a single partition rebuild operation.

DISABLEDISABLE
インデックスを無効とマークし、 データベース エンジンDatabase Engineで使用されないようにします。Marks the index as disabled and unavailable for use by the データベース エンジンDatabase Engine. どのインデックスも無効にできます。Any index can be disabled. 無効になったインデックスのインデックス定義は、基になるインデックス データがなくてもシステム カタログに残ります。The index definition of a disabled index remains in the system catalog with no underlying index data. クラスター化インデックスを無効にすると、基になるテーブル データをユーザーのアクセスができなくなります。Disabling a clustered index prevents user access to the underlying table data. インデックスを有効にするには、ALTER INDEX REBUILD または CREATE INDEX WITH DROP_EXISTING を使用します。To enable an index, use ALTER INDEX REBUILD or CREATE INDEX WITH DROP_EXISTING. 詳細については、次を参照してください。無効にするインデックスと制約Enable Indexes and Constraintsです。For more information, see Disable Indexes and Constraints and Enable Indexes and Constraints.

行ストア インデックスを再構成します。REORGANIZE a rowstore index
行ストア インデックスの場合は、REORGANIZE をインデックスのリーフ レベルを再編成を指定します。For rowstore indexes, REORGANIZE specifies to reorganize the index leaf level. 再構成操作は次のとおりです。The REORGANIZE operation is:

  • 常にオンラインで実行されます。Always performed online. つまり、ALTER INDEX REORGANIZE トランザクション中は、長期にわたって他をブロックするテーブル ロックは保持されず、基になるテーブルへのクエリまたは更新を続行できます。This means long-term blocking table locks are not held and queries or updates to the underlying table can continue during the ALTER INDEX REORGANIZE transaction.

  • 無効なインデックスの許可されていませんNot allowed for a disabled index

  • ALLOW_PAGE_LOCKS が OFF に設定されている場合は許可されません。Not allowed when ALLOW_PAGE_LOCKS is set to OFF

  • いないロールバックされたトランザクション内で実行され、トランザクションがロールバックされます。Not rolled back when it is performed within a transaction and the transaction is rolled back.

REORGANIZE と( LOB_COMPACTION = { ON |オフ} )REORGANIZE WITH ( LOB_COMPACTION = { ON | OFF } )
行ストア インデックスに適用されます。Applies to rowstore indexes.

LOB_COMPACTION = ONLOB_COMPACTION = ON

  • これらのラージ オブジェクト (LOB) データ型のデータが含まれているすべてのページを圧縮することを指定します。 image、text、ntext、varchar (max)、nvarchar (max)、varbinary (max)、および xml です。Specifies to compact all pages that contain data of these large object (LOB) data types: image, text, ntext, varchar(max), nvarchar(max), varbinary(max), and xml. このデータを圧縮すると、ディスク上のデータ サイズが削減できます。Compacting this data can reduce the data size on disk.

  • クラスター化インデックスのテーブルに含まれているすべての LOB 列が圧縮されます。For a clustered index, this compacts all LOB columns that are contained in the table.

  • 非クラスター化インデックス、インデックスに非キー (付加) 列であるすべての LOB 列が圧縮されます。For a nonclustered index, this compacts all LOB columns that are nonkey (included) columns in the index.

  • [すべて再構成] は、すべてのインデックスに対して LOB_COMPACTION を実行します。REORGANIZE ALL performs LOB_COMPACTION on all indexes. インデックスごとに、クラスター化インデックス、基になるテーブル、または付加列非クラスター化インデックス内のすべての LOB 列が圧縮されます。For each index, this compacts all LOB columns in the clustered index, underlying table, or included columns in a nonclustered index.

LOB_COMPACTION = OFFLOB_COMPACTION = OFF

  • ラージ オブジェクト データを含むページは圧縮されません。Pages that contain large object data are not compacted.

  • OFF の指定は、ヒープには影響しません。OFF has no effect on a heap.

列ストア インデックスを再構成します。REORGANIZE a columnstore index
REORGANIZE はオンラインで実行します。REORGANIZE is performed online.

列ストア インデックスの場合は、REORGANIZE は、列ストアに圧縮された行グループと各閉じられたデルタ行グループを圧縮します。For columnstore indexes, REORGANIZE compresses each CLOSED delta rowgroup into the columnstore as a compressed rowgroup.

  • 閉じられたデルタ行グループの圧縮行グループに移動するためには、再編成は必要はありません。REORGANIZE is not required in order to move CLOSED delta rowgroups into compressed rowgroups. バック グラウンドの組ムーバー (TM) プロセスは、閉じられたデルタ行グループを圧縮する定期的に起動します。The background tuple-mover (TM) process wakes up periodically to compress CLOSED delta rowgroups. 組ムーバーが遅延しているときに、REORGANIZE を使用することをお勧めします。We recommend using REORGANIZE when tuple-mover is falling behind. REORGANIZE は、行グループをより積極的に圧縮できます。REORGANIZE can compress rowgroups more aggressively.

  • すべてのオープンとクローズの行グループを圧縮するには、再編成と (COMPRESS_ALL_ROW_GROUPS) オプションはこのセクションの内容を参照してください。To compress all OPEN and CLOSED rowgroups, see the REORGANIZE WITH (COMPRESS_ALL_ROW_GROUPS) option in this section.

SQL Server (2016年以降) および SQL データベースで列ストア インデックスの場合は、REORGANIZE は、次の追加の最適化最適化オンラインを実行します。For columnstore indexes in SQL Server (starting with 2016) and SQL Database, REORGANIZE performs the following additional defragmentation optimizations online:

  • 物理的に行の 10% 以上が論理的に削除されたときに、行グループから行を削除します。Physically removes rows from a rowgroup when 10% or more of the rows have been logically deleted. 削除されたバイトは、物理メディアで再利用されます。The deleted bytes are reclaimed on the physical media. たとえば、100 K を行の削除を 100万行の圧縮された行グループには、SQL Server は、削除された行を削除し、900 k 行と行グループを再圧縮します。For example, if a compressed row group of 1 million rows has 100K rows deleted, SQL Server will remove the deleted rows and recompress the rowgroup with 900k rows. 削除された行を削除することで、記憶域に保存されます。It saves on the storage by removing deleted rows.

  • 1,024,576 行の最大値は行グループあたりの行数を増やすには 1 つまたは複数の圧縮された行グループを結合します。Combines one or more compressed rowgroups to increase rows per rowgroup up to the maximum of 1,024,576 rows. たとえば、一括インポートした 102,400 行のバッチを 5 5 の圧縮行グループが表示されます。For example, if you bulk import 5 batches of 102,400 rows you will get 5 compressed rowgroups. REORGANIZE を実行する場合は、サイズ 512,000 行の圧縮された行グループの 1 にこれらの行グループがマージを取得します。If you run REORGANIZE, these rowgroups will get merged into 1 compressed rowgroup of size 512,000 rows. これによりが存在しなかったディクショナリのサイズやメモリの制限を前提としています。This assumes there were no dictionary size or memory limitations.

  • 10% 以上の行が論理的に削除された行グループ、SQL Server は 1 つまたは複数の行グループと、この行グループを結合する再試行してください。For rowgroups in which 10% or more of the rows have been logically deleted, SQL Server will try to combine this rowgroup with one or more rowgroups. たとえば、500,000 行で 1 行グループが圧縮されて、行グループ 21 は、最大 1,048, 576 行の圧縮します。For example, rowgroup 1 is compressed with 500,000 rows and rowgroup 21 is compressed with the maximum of 1,048,576 rows. 行グループ 21 409,830 行が削除された行の 60% があります。Rowgroup 21 has 60% of the rows deleted which leaves 409,830 rows. SQL Server では、これら 2 つの行グループを 909,830 行を持つ新しい行グループを圧縮を組み合わせることを優先します。SQL Server favors combining these two rowgroups to compress a new rowgroup that has 909,830 rows.

使用して再構成. (COMPRESS_ALL_ROW_GROUPS = {ON |OFF })REORGANIZE WITH ( COMPRESS_ALL_ROW_GROUPS = { ON | OFF } )
SQL Server (2016年以降) および SQL データベースでは、COMPRESS_ALL_ROW_GROUPS は、開くまたは CLOSED のデルタ行グループ、列ストアに強制的に移動する方法を提供します。In SQL Server (starting with 2016) and SQL Database, the COMPRESS_ALL_ROW_GROUPS provides a way to force OPEN or CLOSED delta rowgroups into the columnstore. このオプションを使用して、デルタ行グループを空にする、列ストア インデックスを再構築する必要はありません。With this option, it is not necessary to rebuild the columnstore index to empty the delta rowgroups. これと組み合わせる、他の削除とマージ最適化機能は、ほとんどの状況でインデックスを再構築は必要なくなりました。This, combined with the other remove and merge defragmentation features makes it no longer necessary to rebuild the index in most situations.

  • サイズと終了 (開く) の状態に関係なく、列ストアに、すべての行グループを強制します。ON forces all rowgroups into the columnstore, regardless of size and state (CLOSED or OPEN).

  • オフには、列ストアに CLOSED 行グループのすべてを強制します。OFF forces all CLOSED rowgroups into the columnstore.

設定( <set_index option > [ .n] )SET ( <set_index option> [ ,... n] )
インデックスを再構築または再構成しないでインデックス オプションを指定します。Specifies index options without rebuilding or reorganizing the index. 無効化されたインデックスには、SET は指定できません。SET cannot be specified for a disabled index.

PAD_INDEX = { ON | OFF }PAD_INDEX = { ON | OFF }

適用されます: SQL Server (SQL Server 2008 以降) と Azure SQL データベースです。Applies to: SQL Server (starting with SQL Server 2008) and Azure SQL Database.

インデックスの埋め込みを指定します。Specifies index padding. 既定値は OFF です。The default is OFF.

ONON
FILLFACTOR で指定される空き領域のパーセンテージが、インデックスの中間レベルのページに適用されます。The percentage of free space that is specified by FILLFACTOR is applied to the intermediate-level pages of the index. Fill factor で格納されている値で PAD_INDEX を ON に設定されて、同時に FILLFACTOR が指定されていない場合sys.indexesを使用します。If FILLFACTOR is not specified at the same time PAD_INDEX is set to ON, the fill factor value stored in sys.indexes is used.

OFF またはfillfactorが指定されていませんOFF or fillfactor is not specified
中間レベルのページは、ほぼ全容量が使用されます。The intermediate-level pages are filled to near capacity. この場合、中間ページのキーのセットに基づき、インデックスに割り当てることのできる 1 行以上の最大サイズが収まる分の領域は残されます。This leaves sufficient space for at least one row of the maximum size that the index can have, based on the set of keys on the intermediate pages.

詳細については、「CREATE INDEX (Transact-SQL)」を参照してください。For more information, see CREATE INDEX (Transact-SQL).

FILLFACTOR = fillfactorFILLFACTOR = fillfactor

適用されます: SQL Server (SQL Server 2008 以降) と Azure SQL データベースです。Applies to: SQL Server (starting with SQL Server 2008) and Azure SQL Database.

どの程度を示すパーセンテージを指定します、 データベース エンジンDatabase Engineインデックスの作成または変更時に各インデックス ページのリーフ レベルを作成する必要があります。Specifies a percentage that indicates how full the データベース エンジンDatabase Engine should make the leaf level of each index page during index creation or alteration. fillfactor 1 から 100 までの整数値にする必要があります。fillfactor must be an integer value from 1 to 100. 既定値は 0 です。The default is 0. Fill factor 値 0 と 100 は、すべての点で同じです。Fill factor values 0 and 100 are the same in all respects.

明示的な FILLFACTOR 設定値は、インデックスの初回作成時または再構築時のみ適用されます。An explicit FILLFACTOR setting applies only when the index is first created or rebuilt. データベース エンジンDatabase Engineページ内の空き領域の指定された割合動的に保持しません。The データベース エンジンDatabase Engine does not dynamically keep the specified percentage of empty space in the pages. 詳細については、「CREATE INDEX (Transact-SQL)」を参照してください。For more information, see CREATE INDEX (Transact-SQL).

表示するには、fill factor 設定を使用してsys.indexesです。To view the fill factor setting, use sys.indexes.

重要

データベース エンジンDatabase Engineではクラスター化インデックスの作成時にデータが再分配されるため、FILLFACTOR 値を使用してクラスター化インデックスを作成または変更すると、データ用のストレージ領域のサイズに影響が生じます。Creating or altering a clustered index with a FILLFACTOR value affects the amount of storage space the data occupies, because the データベース エンジンDatabase Engine redistributes the data when it creates the clustered index.

SORT_IN_TEMPDB = {ON |OFF }SORT_IN_TEMPDB = { ON | OFF }

適用されます: SQL Server (SQL Server 2008 以降) と Azure SQL データベースです。Applies to: SQL Server (starting with SQL Server 2008) and Azure SQL Database.

並べ替えの結果を格納するかどうかを示すtempdbです。Specifies whether to store the sort results in tempdb. 既定値は OFF です。The default is OFF.

ONON
インデックスの構築に使用される並べ替えの中間結果が格納されているtempdbです。The intermediate sort results that are used to build the index are stored in tempdb. 場合tempdbは、異なるディスク セットに、ユーザー データベースよりも、インデックスを作成するために必要な時間が削減されます。If tempdb is on a different set of disks than the user database, this may reduce the time needed to create an index. インデックスの構築中に使用されるディスク領域のサイズは増加します。However, this increases the amount of disk space that is used during the index build.

OFFOFF
中間の並べ替え結果はインデックスと同じデータベースに格納されます。The intermediate sort results are stored in the same database as the index.

並べ替え操作が必要でない場合、または並べ替えをメモリ内で実行できる場合は、SORT_IN_TEMPDB オプションは無視されます。If a sort operation is not required, or if the sort can be performed in memory, the SORT_IN_TEMPDB option is ignored.

詳細については、次を参照してください。インデックスの SORT_IN_TEMPDB オプションです。For more information, see SORT_IN_TEMPDB Option For Indexes.

IGNORE_DUP_KEY = {ON |オフ}IGNORE_DUP_KEY = { ON | OFF }
挿入操作で、一意のインデックスに重複するキー値を挿入しようとした場合のエラー応答を指定します。Specifies the error response when an insert operation attempts to insert duplicate key values into a unique index. IGNORE_DUP_KEY オプションは、インデックスが作成または再構築された後の挿入操作のみに適用されます。The IGNORE_DUP_KEY option applies only to insert operations after the index is created or rebuilt. 既定値は OFF です。The default is OFF.

ONON
重複したキー値が一意のインデックスに挿入されると、警告メッセージが表示されます。A warning message will occur when duplicate key values are inserted into a unique index. 一意性制約に違反する行のみが失敗します。Only the rows violating the uniqueness constraint will fail.

OFFOFF
重複したキー値が一意のインデックスに挿入されると、エラー メッセージが表示されます。An error message will occur when duplicate key values are inserted into a unique index. INSERT 操作全体がロールバックされます。The entire INSERT operation will be rolled back.

ビューに作成されたインデックス、一意でないインデックス、XML インデックス、空間インデックス、およびフィルター選択されたインデックスの IGNORE_DUP_KEY を ON に設定できません。IGNORE_DUP_KEY cannot be set to ON for indexes created on a view, non-unique indexes, XML indexes, spatial indexes, and filtered indexes.

IGNORE_DUP_KEY を表示するsys.indexesです。To view IGNORE_DUP_KEY, use sys.indexes.

旧バージョンと互換性のある構文では、WITH IGNORE_DUP_KEY は WITH IGNORE_DUP_KEY = ON と同じです。In backward compatible syntax, WITH IGNORE_DUP_KEY is equivalent to WITH IGNORE_DUP_KEY = ON.

STATISTICS_NORECOMPUTE = {ON |オフ}STATISTICS_NORECOMPUTE = { ON | OFF }
分布統計を再計算するかどうかを指定します。Specifies whether distribution statistics are recomputed. 既定値は OFF です。The default is OFF.

ONON
古い統計情報は、自動的には再計算されません。Out-of-date statistics are not automatically recomputed.

OFFOFF
自動統計更新が有効です。Automatic statistics updating are enabled.

自動統計更新を復元するには、STATISTICS_NORECOMPUTE を OFF に設定するか、NORECOMPUTE 句を指定せずに UPDATE STATISTICS を実行します。To restore automatic statistics updating, set the STATISTICS_NORECOMPUTE to OFF, or execute UPDATE STATISTICS without the NORECOMPUTE clause.

重要

分布統計の自動再計算を無効にすると、クエリ オプティマイザーで、テーブルに関連するクエリの最適実行プランが選択されなくなる場合があります。Disabling automatic recomputation of distribution statistics may prevent the query optimizer from picking optimal execution plans for queries that involve the table.

STATISTICS_INCREMENTAL = {ON |OFF }STATISTICS_INCREMENTAL = { ON | OFF }
ときにON、作成される統計は、パーティションごとの統計はします。When ON, the statistics created are per partition statistics. ときにOFF、統計ツリーが削除されると SQL ServerSQL Server統計が再計算します。When OFF, the statistics tree is dropped and SQL ServerSQL Server re-computes the statistics. 既定値はOFFです。The default is OFF.

パーティションごとの統計がサポートされていない場合、このオプションは無視され、警告が生成されます。If per partition statistics are not supported the option is ignored and a warning is generated. 次の種類の統計では、増分統計がサポートされていません。Incremental stats are not supported for following statistics types:

  • ベース テーブルにパーティションで固定されていないインデックスを使用して作成された統計。Statistics created with indexes that are not partition-aligned with the base table.

  • Always On の読み取り可能なセカンダリ データベースに対して作成された統計。Statistics created on Always On readable secondary databases.

  • 読み取り専用のデータベースに対して作成された統計。Statistics created on read-only databases.

  • フィルター選択されたインデックスに対して作成された統計。Statistics created on filtered indexes.

  • ビューに対して作成された統計。Statistics created on views.

  • 内部テーブルに対して作成された統計。Statistics created on internal tables.

  • 空間インデックスまたは XML インデックスを使用して作成された統計。Statistics created with spatial indexes or XML indexes.

適用されます: SQL Server (SQL Server 2014 以降) と Azure SQL データベースです。Applies to: SQL Server (starting with SQL Server 2014) and Azure SQL Database.

オンライン = {ON |OFF } <rebuild_index_option に適用する >ONLINE = { ON | OFF } <as applies to rebuild_index_option>
インデックス操作時に、基になるテーブルや関連するインデックスをクエリやデータ変更で使用できるかどうかを指定します。Specifies whether underlying tables and associated indexes are available for queries and data modification during the index operation. 既定値は OFF です。The default is OFF.

XML インデックスまたは空間インデックスの場合、ONLINE = OFF だけがサポートされます。ONLINE を ON に設定すると、エラーが発生します。For an XML index or spatial index, only ONLINE = OFF is supported, and if ONLINE is set to ON an error is raised.

注意

オンラインでのインデックス操作は、 MicrosoftMicrosoft SQL ServerSQL Server のすべてのエディションで使用できるわけではありません。Online index operations are not available in every edition of MicrosoftMicrosoft SQL ServerSQL Server. SQL ServerSQL Server の各エディションでサポートされる機能の一覧については、「Editions and Supported Features for SQL Server 2016」 (SQL Server 2016 のエディションとサポートされる機能) を参照してください。For a list of features that are supported by the editions of SQL ServerSQL Server, see Editions and Supported Features for SQL Server 2016.

ONON
長期のテーブル ロックは、インデックス操作の間は保持されません。Long-term table locks are not held for the duration of the index operation. インデックス操作の主なフェーズでは、基になるテーブル、インテント共有 (IS) ロックのみが保持されます。During the main phase of the index operation, only an Intent Share (IS) lock is held on the source table. これによって、基になるテーブルおよびインデックスに対してクエリや更新を続けることができます。This allows queries or updates to the underlying table and indexes to continue. 操作の開始時、非常に短い時間、ソース オブジェクトでは共有 (S) ロックが保持されます。At the start of the operation, a Shared (S) lock is very briefly held on the source object. 操作の終了時、非クラクタ化インデックスが作成される場合は、短い時間、ソース オブジェクト上で S ロックが保持されます。また、クラスター化インデックスがオンラインで作成または削除されるか、クラスター化または非クラスター化インデックスが再構築される場合は、SCH-M (スキーマ修正) ロックが取得されます。At the end of the operation, an S lock is very briefly held on the source if a nonclustered index is being created, or an SCH-M (Schema Modification) lock is acquired when a clustered index is created or dropped online, or when a clustered or nonclustered index is being rebuilt. インデックスがローカルの一時テーブルに作成される場合、ONLINE は ON にできません。ONLINE cannot be set to ON when an index is being created on a local temporary table.

OFFOFF
テーブル ロックは、インデックス操作の間適用されます。Table locks are applied for the duration of the index operation. オフラインのインデックス操作で、クラスター化インデックス、空間インデックス、XML インデックスの作成、再構築、削除を行う場合や、非クラスター化インデックスの再構築、削除を行う場合は、テーブルで Sch-M (スキーマ修正) ロックが取得されます。An offline index operation that creates, rebuilds, or drops a clustered, spatial, or XML index, or rebuilds or drops a nonclustered index, acquires a Schema modification (Sch-M) lock on the table. このため、操作中は、すべてのユーザーは基になるテーブルにアクセスできません。This prevents all user access to the underlying table for the duration of the operation. 非クラスター化インデックスを作成するオフライン インデックス操作では、テーブルの共有 (S) ロックが取得されます。An offline index operation that creates a nonclustered index acquires a Shared (S) lock on the table. この場合は、基になるテーブルに対して更新は許可されませんが、SELECT ステートメントなどの読み取り操作は許可されます。This prevents updates to the underlying table but allows read operations, such as SELECT statements.

詳細については、次を参照してください。オンライン インデックス操作しくみです。For more information, see How Online Index Operations Work.

インデックスは、グローバル一時テーブル上のインデックスを含めてオンラインで再構築できます。ただし、次のインデックスは例外です。Indexes, including indexes on global temp tables, can be rebuilt online with the following exceptions:

  • XML インデックス数XML indexes

  • ローカル一時テーブル上のインデックスIndexes on local temp tables

  • パーティション インデックスのサブセット (パーティション インデックス全体の再構築はオンラインで実行できます)A subset of a partitioned index (An entire partitioned index can be rebuilt online.)

  • V12 で前に SQL データベースと SQL Server 2012 より前の SQL Server が許可されていない、ONLINEオプションをクラスター化インデックスの構築またはベース テーブルが含まれている場合は、操作を再構築varchar (max)またはvarbinary (max)列です。SQL Database prior to V12, and SQL Server prior to SQL Server 2012, do not permit the ONLINE option for clustered index build or rebuild operations when the base table contains varchar(max) or varbinary(max) columns.

再開可能な = {ON |OFF}RESUMABLE = { ON | OFF}

適用されます: SQL Server 2017、および Azure SQL データベース (機能が公開プレビュー) で始まるApplies to: Beginning with SQL Server 2017 and Azure SQL Database (feature is in public preview)

オンライン インデックス操作が再開可能かどうかを指定します。Specifies whether an online index operation is resumable.

インデックス操作は再開可能な状態です。ON Index operation is resumable.

インデックスをオフは、操作は再開可能な状態ではありません。OFF Index operation is not resumable.

MAX_DURATION = 時間[] と共に使用再開可能 = ON (必要ONLINE = ON).MAX_DURATION = time [MINUTES] used with RESUMABLE = ON (requires ONLINE = ON).

適用されます: SQL Server 2017、および Azure SQL データベース (機能が公開プレビュー) で始まるApplies to: Beginning with SQL Server 2017 and Azure SQL Database (feature is in public preview)

時間を示します (分単位で指定された整数値)、再開可能なオンライン インデックス操作が一時停止する前に実行します。Indicates time (an integer value specified in minutes) that a resumable online index operation is executed before being paused.

ALLOW_ROW_LOCKS = { ON |オフ}ALLOW_ROW_LOCKS = { ON | OFF }

適用されます: SQL Server (SQL Server 2008 以降) と Azure SQL データベースです。Applies to: SQL Server (starting with SQL Server 2008) and Azure SQL Database.

行ロックを許可するかどうかを指定します。Specifies whether row locks are allowed. 既定値は ON です。The default is ON.

ONON
インデックスにアクセスするとき、行ロックが許可されます。Row locks are allowed when accessing the index. いつ行ロックを使用するかは、 データベース エンジンDatabase Engineによって決定されます。The データベース エンジンDatabase Engine determines when row locks are used.

OFFOFF
行ロックは使用されません。Row locks are not used.

ALLOW_PAGE_LOCKS = { ON |オフ}ALLOW_PAGE_LOCKS = { ON | OFF }

適用されます: SQL Server (SQL Server 2008 以降) と Azure SQL データベースです。Applies to: SQL Server (starting with SQL Server 2008) and Azure SQL Database.

ページ ロックを許可するかどうかを指定します。Specifies whether page locks are allowed. 既定値は ON です。The default is ON.

ONON
インデックスにアクセスするとき、ページ ロックが許可されます。Page locks are allowed when you access the index. データベース エンジンDatabase Engineページ ロックを使用する場合を決定します。The データベース エンジンDatabase Engine determines when page locks are used.

OFFOFF
ページ ロックは使用されません。Page locks are not used.

注意

ALLOW_PAGE_LOCKS を OFF に設定した場合、インデックスを再構成することはできません。An index cannot be reorganized when ALLOW_PAGE_LOCKS is set to OFF.

MAXDOP = max_degree_of_parallelismMAXDOP = max_degree_of_parallelism

適用されます: SQL Server (SQL Server 2008 以降) と Azure SQL データベースです。Applies to: SQL Server (starting with SQL Server 2008) and Azure SQL Database.

上書き、並列処理の次数の最大インデックス操作の実行中の構成オプション。Overrides the max degree of parallelism configuration option for the duration of the index operation. 詳細については、「 max degree of parallelism サーバー構成オプションの構成」を参照してください。For more information, see Configure the max degree of parallelism Server Configuration Option. 並列プランの実行で使用されるプロセッサ数を制限するには、MAXDOP を使用します。Use MAXDOP to limit the number of processors used in a parallel plan execution. 最大数は 64 プロセッサです。The maximum is 64 processors.

重要

MAXDOP オプションはすべての XML インデックスで構文的にサポートされていますが、空間インデックスまたはプライマリ XML インデックスの場合、現在の ALTER INDEX では単一のプロセッサのみが使用されます。Although the MAXDOP option is syntactically supported for all XML indexes, for a spatial index or a primary XML index, ALTER INDEX currently uses only a single processor.

max_degree_of_parallelismを指定できます。max_degree_of_parallelism can be:

11
並列プラン生成を抑制します。Suppresses parallel plan generation.

>1>1
並列インデックス操作で使用される最大プロセッサ数を、指定した数に制限します。Restricts the maximum number of processors used in a parallel index operation to the specified number.

0 (既定値)0 (default)
現在のシステム ワークロードに基づいて、実際の数以下のプロセッサを使用します。Uses the actual number of processors or fewer based on the current system workload.

詳細については、「 並列インデックス操作の構成」を参照してください。For more information, see Configure Parallel Index Operations.

注意

並列インデックス操作はすべてのエディションで使用できない MicrosoftMicrosoft SQL ServerSQL Serverです。Parallel index operations are not available in every edition of MicrosoftMicrosoft SQL ServerSQL Server. SQL ServerSQL Server の各エディションでサポートされる機能の一覧については、「Editions and Supported Features for SQL Server 2016」 (SQL Server 2016 のエディションとサポートされる機能) を参照してください。For a list of features that are supported by the editions of SQL ServerSQL Server, see Editions and Supported Features for SQL Server 2016.

COMPRESSION_DELAY = { 0 |期間 [分] }COMPRESSION_DELAY = { 0 |duration [Minutes] }
この機能は SQL Server 2016 以降で使用できます。This feature is available starting with SQL Server 2016

ディスク ベース テーブルでは、SQL Server を使用すると、圧縮された行グループに圧縮できる前に、遅延はデルタ行グループで閉じられた状態で、デルタ行グループがある必要があります (分) の最小数を指定します。For a disk-based table, delay specifies the minimum number of minutes a delta rowgroup in the CLOSED state must remain in the delta rowgroup before SQL Server can compress it into the compressed rowgroup. ディスク ベース テーブルの挿入を追跡および更新されないため時間個々 の行に SQL Server を適用の遅延が閉じられた状態で、デルタ行グループ。Since disk-based tables don't track insert and update times on individual rows, SQL Server applies the delay to delta rowgroups in the CLOSED state.
既定値は、0 分です。The default is 0 minutes.

既定値は、0 分です。The default is 0 minutes.

リアルタイム運用分析のため、列ストア インデックスを参照してください、COMPRESSION_DELAY を使用する場合の推奨事項についてはします。For recommendations on when to use COMPRESSION_DELAY, see Columnstore Indexes for Real-Time Operational Analytics.

DATA_COMPRESSIONDATA_COMPRESSION
指定したインデックス、パーティション番号、またはパーティション範囲に、データ圧縮オプションを指定します。Specifies the data compression option for the specified index, partition number, or range of partitions. 次のオプションがあります。The options are as follows:

なしNONE
インデックスまたは指定したパーティションが圧縮されません。Index or specified partitions are not compressed. これは、列ストア インデックスには適用されません。This does not apply to columnstore indexes.

ROWROW
行の圧縮を使用して、インデックスまたは指定したパーティションが圧縮されます。Index or specified partitions are compressed by using row compression. これは、列ストア インデックスには適用されません。This does not apply to columnstore indexes.

PAGEPAGE
ページの圧縮を使用して、インデックスまたは指定したパーティションが圧縮されます。Index or specified partitions are compressed by using page compression. これは、列ストア インデックスには適用されません。This does not apply to columnstore indexes.

COLUMNSTORECOLUMNSTORE

適用されます: SQL Server (SQL Server 2014 以降) と Azure SQL データベースです。Applies to: SQL Server (starting with SQL Server 2014) and Azure SQL Database.

非クラスター化列ストア インデックスとクラスター化列ストア インデックスの両方を含む列ストア インデックスにのみ適用されます。Applies only to columnstore indexes, including both nonclustered columnstore and clustered columnstore indexes. COLUMNSTORE は、COLUMNSTORE_ARCHIVE オプションで圧縮されたインデックスまたは指定のパーティションを解凍するように指定します。COLUMNSTORE specifies to decompress the index or specified partitions that are compressed with the COLUMNSTORE_ARCHIVE option. 復元されるデータは、すべての列ストア インデックスに使用された列ストア圧縮を使用して引き続き圧縮されます。When the data is restored, it will continue to be compressed with the columnstore compression that is used for all columnstore indexes.

COLUMNSTORE_ARCHIVECOLUMNSTORE_ARCHIVE

適用されます: SQL Server (SQL Server 2014 以降) と Azure SQL データベースです。Applies to: SQL Server (starting with SQL Server 2014) and Azure SQL Database.

非クラスター化列ストア インデックスとクラスター化列ストア インデックスの両方を含む列ストア インデックスにのみ適用されます。Applies only to columnstore indexes, including both nonclustered columnstore and clustered columnstore indexes. COLUMNSTORE_ARCHIVE は、指定したパーティションをより小さなサイズにさらに圧縮します。COLUMNSTORE_ARCHIVE will further compress the specified partition to a smaller size. これは、保存用や、ストレージのサイズを減らす必要があり、しかも保存と取得に時間をかける余裕があるその他の状況で使用できます。This can be used for archival, or for other situations that require a smaller storage size and can afford more time for storage and retrieval.

圧縮の詳細については、次を参照してください。データ圧縮です。For more information about compression, see Data Compression.

パーティションで( { <partition_number_expression > |<範囲 >}[... n] )ON PARTITIONS ( { <partition_number_expression> | <range> } [,...n] )

適用されます: SQL Server (SQL Server 2008 以降) と Azure SQL データベースです。Applies to: SQL Server (starting with SQL Server 2008) and Azure SQL Database.

DATA_COMPRESSION 設定を適用するパーティションを指定します。Specifies the partitions to which the DATA_COMPRESSION setting applies. インデックスがパーティション分割されていない場合に ON PARTITIONS 引数を使用すると、エラーが発生します。If the index is not partitioned, the ON PARTITIONS argument will generate an error. ON PARTITIONS 句を指定しないと、パーティション インデックスのすべてのパーティションに対して DATA_COMPRESSION オプションが適用されます。If the ON PARTITIONS clause is not provided, the DATA_COMPRESSION option applies to all partitions of a partitioned index.

<partition_number_expression > 次のように指定することができます。<partition_number_expression> can be specified in the following ways:

  • ON PARTITIONS (2) などのように、1 つのパーティションの番号を指定します。Provide the number for a partition, for example: ON PARTITIONS (2).

  • ON PARTITIONS (1, 5) などのように、複数のパーティションのパーティション番号をコンマで区切って指定します。Provide the partition numbers for several individual partitions separated by commas, for example: ON PARTITIONS (1, 5).

  • 範囲と個別のパーティションの両方を提供: ON PARTITIONS (2、4, 6 TO 8)。Provide both ranges and individual partitions: ON PARTITIONS (2, 4, 6 TO 8).

    <範囲 > パーティション番号など、to で区切って指定できます: ON PARTITIONS (6 TO 8)。<range> can be specified as partition numbers separated by the word TO, for example: ON PARTITIONS (6 TO 8).

    さまざまなパーティションにさまざまな種類のデータ圧縮を設定するには、次のように DATA_COMPRESSION オプションを複数回指定します。To set different types of data compression for different partitions, specify the DATA_COMPRESSION option more than once, for example:

REBUILD WITH   
(  
DATA_COMPRESSION = NONE ON PARTITIONS (1),   
DATA_COMPRESSION = ROW ON PARTITIONS (2, 4, 6 TO 8),   
DATA_COMPRESSION = PAGE ON PARTITIONS (3, 5)  
);  

オンライン = {ON |OFF } <single_partition_rebuild_index_option に適用 >ONLINE = { ON | OFF } <as applies to single_partition_rebuild_index_option>
かどうか、インデックスまたは基になるテーブルのインデックス パーティションの再構築オンラインまたはオフラインを指定します。Specifies whether an index or an index partition of an underlying table can be rebuilt online or offline. 場合リビルドはオンラインで実行 (ON) このテーブルのデータはクエリやデータの変更、インデックス操作中に使用します。If REBUILD is performed online (ON) the data in this table is available for queries and data modification during the index operation. 既定値はOFFです。The default is OFF.

ONON
長期のテーブル ロックは、インデックス操作の間は保持されません。Long-term table locks are not held for the duration of the index operation. インデックス操作の主要フェーズの期間、ソース テーブルではインテント共有 (IS) ロックのみが保持されます。During the main phase of the index operation, only an Intent Share (IS) lock is held on the source table. インデックスの再構築し、オンライン インデックス再構築の最後に、テーブルに対する SCH-M ロックの開始時に、テーブルで S ロックが必要です。An S-lock on the table is required in the beginning of the index rebuild and a Sch-M lock on the table at the end of the online index rebuild. どちらのロックも短いメタデータ ロックですが、特に Sch-M ロックは、すべてのブロックしているトランザクションの完了を待機する必要があります。Although both locks are short metadata locks, especially the Sch-M lock must wait for all blocking transactions to be completed. 待機中、Sch-M ロックは、同じテーブルにアクセスするためにこのロックの後に待機している他のすべてのトランザクションをブロックします。During the wait time the Sch-M lock blocks all other transactions that wait behind this lock when accessing the same table.

注意

オンライン インデックス再構築が設定できる、 low_priority_lock_waitオプションのこのセクションで後述します。Online index rebuild can set the low_priority_lock_wait options described later in this section.

OFFOFF
テーブル ロックは、インデックス操作の間適用されます。Table locks are applied for the duration of the index operation. このため、操作中は、すべてのユーザーは基になるテーブルにアクセスできません。This prevents all user access to the underlying table for the duration of the operation.

WAIT_AT_LOW_PRIORITY を併用ONLINE = ONのみです。WAIT_AT_LOW_PRIORITY used with ONLINE=ON only.

適用されます: SQL Server (SQL Server 2014 以降) と Azure SQL データベースです。Applies to: SQL Server (starting with SQL Server 2014) and Azure SQL Database.

オンライン インデックス再構築では、このテーブルに対する操作がブロックされるまで待機する必要があります。An online index rebuild has to wait for blocking operations on this table. WAIT_AT_LOW_PRIORITYオンライン インデックス再構築操作が他の操作を続行しながら、オンライン インデックス構築操作が待機している、優先度の低いロックを待つことを示します。WAIT_AT_LOW_PRIORITY indicates that the online index rebuild operation will wait for low priority locks, allowing other operations to proceed while the online index build operation is waiting. 省略すると、 WAIT AT LOW PRIORITYオプションに相当WAIT_AT_LOW_PRIORITY (MAX_DURATION = 0 minutes, ABORT_AFTER_WAIT = NONE)です。Omitting the WAIT AT LOW PRIORITY option is equivalent to WAIT_AT_LOW_PRIORITY (MAX_DURATION = 0 minutes, ABORT_AFTER_WAIT = NONE). 詳細については、次を参照してください。 WAIT_AT_LOW_PRIORITYです。For more information, see WAIT_AT_LOW_PRIORITY.

MAX_DURATION =時間[]MAX_DURATION = time [MINUTES]

適用されます: SQL Server (SQL Server 2014 以降) と Azure SQL データベースです。Applies to: SQL Server (starting with SQL Server 2014) and Azure SQL Database.

オンライン インデックス再構築のロックが、DDL コマンドの実行時に低い優先度で待機する時間 (分単位で指定した整数値) です。The wait time (an integer value specified in minutes) that the online index rebuild locks will wait with low priority when executing the DDL command. 操作がブロックされている場合、 MAX_DURATIONのいずれかの時間、 ABORT_AFTER_WAIT動作が実行されます。If the operation is blocked for the MAX_DURATION time, one of the ABORT_AFTER_WAIT actions will be executed. MAX_DURATION時間は分、および、word では常にを省略できます。MAX_DURATION time is always in minutes, and the word MINUTES can be omitted.

ABORT_AFTER_WAIT = [NONE | SELF | ブロッカー }]ABORT_AFTER_WAIT = [NONE | SELF | BLOCKERS } ]

適用されます: SQL Server (SQL Server 2014 以降) と Azure SQL データベースです。Applies to: SQL Server (starting with SQL Server 2014) and Azure SQL Database.

なしNONE
通常の (標準) 優先度のロックを待機し続けます。Continue waiting for the lock with normal (regular) priority.

SELFSELF
いずれのアクションも行わずに、現在実行中のオンライン インデックス再構築の DDL 操作を終了します。Exit the online index rebuild DDL operation currently being executed without taking any action.

BLOCKERSBLOCKERS
オンライン インデックス再構築の DDL 操作をブロックしているすべてのユーザー トランザクションを強制終了して、操作を続行できるようにします。Kill all user transactions that block the online index rebuild DDL operation so that the operation can continue. ブロッカーオプションは、ログインには必要とALTER ANY CONNECTION権限です。The BLOCKERS option requires the login to have ALTER ANY CONNECTION permission.

RESUMERESUME

適用されます: SQL Server 2017 年 (機能が公開プレビュー) で始まるApplies to: Beginning with SQL Server 2017 (feature is in public preview)

手動でまたはエラーのために一時停止しているインデックス操作を再開します。Resume an index operation that is paused manually or due to a failure.

MAX_DURATION の併用再開可能 ON を =MAX_DURATION used with RESUMABLE=ON

適用されます: SQL Server 2017、および Azure SQL データベース (機能が公開プレビュー) で始まるApplies to: Beginning with SQL Server 2017 and Azure SQL Database (feature is in public preview)

時間 (分単位で指定された整数値)、再開可能なオンライン インデックス操作が再開された後に実行します。The time (an integer value specified in minutes) the resumable online index operation is executed after being resumed. 時間が切れると、まだ実行されている場合、再開操作が一時停止します。Once the time expires, the resumable operation is paused if it is still running.

WAIT_AT_LOW_PRIORITY を併用再開可能 = ONONLINE = ONです。WAIT_AT_LOW_PRIORITY used with RESUMABLE=ON and ONLINE = ON.

適用されます: SQL Server 2017、および Azure SQL データベース (機能が公開プレビュー) で始まるApplies to: Beginning with SQL Server 2017 and Azure SQL Database (feature is in public preview)

このテーブルに対するブロック操作の待機を一時停止した後は、オンラインのインデックスの再構築を再開しています。Resuming an online index rebuild after a pause has to wait for blocking operations on this table. WAIT_AT_LOW_PRIORITYオンライン インデックス再構築操作が他の操作を続行しながら、オンライン インデックス構築操作が待機している、優先度の低いロックを待つことを示します。WAIT_AT_LOW_PRIORITY indicates that the online index rebuild operation will wait for low priority locks, allowing other operations to proceed while the online index build operation is waiting. 省略すると、 WAIT AT LOW PRIORITYオプションに相当WAIT_AT_LOW_PRIORITY (MAX_DURATION = 0 minutes, ABORT_AFTER_WAIT = NONE)です。Omitting the WAIT AT LOW PRIORITY option is equivalent to WAIT_AT_LOW_PRIORITY (MAX_DURATION = 0 minutes, ABORT_AFTER_WAIT = NONE). 詳細については、次を参照してください。 WAIT_AT_LOW_PRIORITYです。For more information, see WAIT_AT_LOW_PRIORITY.

一時停止PAUSE

適用されます: SQL Server 2017、および Azure SQL データベース (機能が公開プレビュー) で始まるApplies to: Beginning with SQL Server 2017 and Azure SQL Database (feature is in public preview)

再開可能なオンライン インデックス再構築の操作を一時停止します。Pause a resumable online index rebuild operation.

中止ABORT

適用されます: SQL Server 2017、および Azure SQL データベース (機能が公開プレビュー) で始まるApplies to: Beginning with SQL Server 2017 and Azure SQL Database (feature is in public preview)

再開可能として宣言されている、実行中または一時停止中のインデックス操作を中止します。Abort a running or paused index operation that was declared as resumable. 明示的に実行する必要がある、中止コマンドが終了、再開可能なインデックス操作を再構築します。You have to explicitly execute an ABORT command to terminate a resumable index rebuild operation. 障害または一時停止、再開可能なインデックス操作の実行を終了しません代わりに、不定の一時停止状態で、操作に任せます。Failure or pausing a resumable index operation does not terminate its execution; rather, it leaves the operation in an indefinite pause state.

解説Remarks

インデックスをパーティションに再分割するか別のファイル グループに移動する場合、ALTER INDEX は使用できません。ALTER INDEX cannot be used to repartition an index or move it to a different filegroup. このステートメントは、列の追加や削除、または列の順序変更など、インデックス定義の変更には使用できません。This statement cannot be used to modify the index definition, such as adding or deleting columns or changing the column order. これらの操作を実行するには、CREATE INDEX を DROP_EXISTING 句と共に使用します。Use CREATE INDEX with the DROP_EXISTING clause to perform these operations.

オプションを明示的に指定しない場合は、現在の設定が適用されます。When an option is not explicitly specified, the current setting is applied. たとえば、REBUILD 句で FILLFACTOR 設定を指定しなかった場合、再構築処理では、システム カタログに格納されている FILL FACTOR 値が使用されます。For example, if a FILLFACTOR setting is not specified in the REBUILD clause, the fill factor value stored in the system catalog will be used during the rebuild process. 現在のインデックス オプションの設定を表示するsys.indexesです。To view the current index option settings, use sys.indexes.

注意

ONLINE、MAXDOP、および SORT_IN_TEMPDB の値は、システム カタログに格納されません。The values for ONLINE, MAXDOP, and SORT_IN_TEMPDB are not stored in the system catalog. インデックス ステートメントでオプション値を指定しない限り、各オプションの既定値が使用されます。Unless specified in the index statement, the default value for the option is used.

マルチプロセッサ コンピューター上では、ALTER INDEX REBUILD は他のクエリと同様、自動的に使用プロセッサの数を増やしてインデックスの変更に関連するスキャンや並べ替え操作を実行します。On multiprocessor computers, just like other queries do, ALTER INDEX REBUILD automatically uses more processors to perform the scan and sort operations that are associated with modifying the index. 実行すると ALTER INDEX REORGANIZE を LOB_COMPACTION の有無、並列処理の次数の最大値は 1 つのスレッド操作します。When you run ALTER INDEX REORGANIZE, with or without LOB_COMPACTION, the max degree of parallelism value is a single threaded operation. 詳細については、「 並列インデックス操作の構成」を参照してください。For more information, see Configure Parallel Index Operations.

インデックスのあるファイル グループがオフラインまたは読み取り専用に設定されていると、インデックスを再構成または再構築することはできません。An index cannot be reorganized or rebuilt if the filegroup in which it is located is offline or set to read-only. キーワード ALL を指定した場合で、1 つ以上のインデックスがオフラインまたは読み取り専用のファイル グループにある場合、ステートメントは失敗します。When the keyword ALL is specified and one or more indexes are in an offline or read-only filegroup, the statement fails.

インデックスの再構築Rebuilding Indexes

インデックスの再構築では、インデックスを削除し再作成します。Rebuilding an index drops and re-creates the index. この操作では、断片化をなくし、指定されているか既に存在する FILL FACTOR 設定に基づいてページを圧縮することによりディスク領域を取り戻した後、連続するページにインデックス行を再び並べ替えます。This removes fragmentation, reclaims disk space by compacting the pages based on the specified or existing fill factor setting, and reorders the index rows in contiguous pages. ALL を指定した場合、テーブル上のすべてのインデックスが、1 回のトランザクションで削除され再構築されます。When ALL is specified, all indexes on the table are dropped and rebuilt in a single transaction. FOREIGN KEY 制約は、前もって削除しておく必要はありません。FOREIGN KEY constraints do not have to be dropped in advance. 128 以上のエクステントがあるインデックスを再構築すると、 データベース エンジンDatabase Engineでは、トランザクションがコミットされるまで実際のページの割り当て解除とそれに関連するロックが延期されます。When indexes with 128 extents or more are rebuilt, the データベース エンジンDatabase Engine defers the actual page deallocations, and their associated locks, until after the transaction commits.

小さなインデックスを再構築または再構成しても、多くの場合、断片化が解消することはありません。Rebuilding or reorganizing small indexes often does not reduce fragmentation. 小さなインデックスのページは、混合エクステントに格納される場合もあります。The pages of small indexes are sometimes stored on mixed extents. 混合エクステントは最大 8 つのオブジェクトで共有されるため、小さなインデックスを再構成または再構築しても、その断片化は解消されない場合があります。Mixed extents are shared by up to eight objects, so the fragmentation in a small index might not be reduced after reorganizing or rebuilding it.

SQL Server 2012SQL Server 2012以降では、パーティション インデックスが作成または再構築された場合、テーブル内のすべての行をスキャンして統計を作成することはできません。Starting with SQL Server 2012SQL Server 2012, statistics are not created by scanning all the rows in the table when a partitioned index is created or rebuilt. 代わりに、クエリ オプティマイザーが既定のサンプリング アルゴリズムを使用して統計を生成します。Instead, the query optimizer uses the default sampling algorithm to generate statistics. テーブル内のすべての行をスキャンしてパーティション インデックスの統計を作成するには、FULLSCAN 句で CREATE STATISTICS または UPDATE STATISTICS を使用します。To obtain statistics on partitioned indexes by scanning all the rows in the table, use CREATE STATISTICS or UPDATE STATISTICS with the FULLSCAN clause.

以前のバージョンの SQL ServerSQL Server では、非クラスター化インデックスを再構築することで、ハードウェア障害により発生した不一致を修正できる場合がありました。In earlier versions of SQL ServerSQL Server, you could sometimes rebuild a nonclustered index to correct inconsistencies caused by hardware failures. SQL Server 2008:SQL Server 2008後で、まだことができます、非クラスター化インデックスをオフラインの再構築して、インデックスとクラスター化インデックス間の不一致を修復するとします。In SQL Server 2008:SQL Server 2008 and later, you may still be able to repair such inconsistencies between the index and the clustered index by rebuilding a nonclustered index offline. オンラインでインデックスを再構築する場合、既存の非クラスター化インデックスを基に再構築が行われるので、不一致を維持してしまい非クラスター化インデックスの不一致を修復できません。However, you cannot repair nonclustered index inconsistencies by rebuilding the index online, because the online rebuild mechanism will use the existing nonclustered index as the basis for the rebuild and thus persist the inconsistency. オフラインでインデックスを再構築すると、強制的にクラスター化インデックス (ヒープ) のスキャンがなされ、不一致が解消されることがあります。Rebuilding the index offline can sometimes force a scan of the clustered index (or heap) and so remove the inconsistency. クラスター化インデックスからの再構築を保証するため、非クラスター化インデックスを削除および再作成します。To assure a rebuild from the clustered index, drop and recreate the non-clustered index. 不一致を解消する場合、以前のバージョンと同様に影響を受けたデータをバックアップから復元することをお勧めします。ただし、非クラスター化インデックスをオフラインで再構築しても、インデックスの不一致を修復できます。As with earlier versions, we recommend recovering from inconsistencies by restoring the affected data from a backup; however, you may be able to repair the index inconsistencies by rebuilding the nonclustered index offline. 詳細については、「DBCC CHECKDB (Transact-SQL)」を参照してください。For more information, see DBCC CHECKDB (Transact-SQL).

クラスター化列ストア インデックスを再構築する際、 SQL ServerSQL Server は以下のように動作します。To rebuild a clustered columnstore index, SQL ServerSQL Server:

  1. 再構築が行われている間、テーブルまたはパーティションを排他的にロックします。Acquires an exclusive lock on the table or partition while the rebuild occurs. 再構築の間、データは "オフライン" になって使用できません。The data is “offline” and unavailable during the rebuild.

  2. テーブルから論理的に削除された行を物理的に削除することで、列ストアをデフラグします。削除されたバイトは物理メディアで再利用されます。Defragments the columnstore by physically deleting rows that have been logically deleted from the table; the deleted bytes are reclaimed on the physical media.

  3. 元の列ストア インデックスから、デルタストアを含むすべてのデータを読み取ります。Reads all data from the original columnstore index, including the deltastore. データを新しい行グループに結合し、行グループを列ストアに圧縮します。It combines the data into new rowgroups, and compresses the rowgroups into the columnstore.

  4. 再構築中に、物理メディア上の領域を要求して列ストア インデックスのコピーを 2 つ格納します。Requires space on the physical media to store two copies of the columnstore index while the rebuild is taking place. 再構築が完了すると、 SQL ServerSQL Server は元のクラスター化列ストア インデックスを削除します。When the rebuild is finished, SQL ServerSQL Server deletes the original clustered columnstore index.

インデックスの再構成Reorganizing Indexes

インデックスの再構成では、最小のシステム リソースが使用されます。Reorganizing an index uses minimal system resources. この操作では、リーフ レベル ページをリーフ ノードの論理順序 (左から右) に合わせて物理的に並べ替えることにより、テーブルやビュー上にあるクラスター化および非クラスター化インデックスのリーフ レベルをデフラグします。It defragments the leaf level of clustered and nonclustered indexes on tables and views by physically reordering the leaf-level pages to match the logical, left to right, order of the leaf nodes. 再構成でも、インデックス ページは圧縮されます。Reorganizing also compacts the index pages. 圧縮は既存の FILL FACTOR 値に基づいて行われます。Compaction is based on the existing fill factor value. 表示するには、fill factor 設定を使用してsys.indexesです。To view the fill factor setting, use sys.indexes.

ALL を指定した場合、テーブル上のクラスター化および非クラスター化両方のリレーショナル インデックスと XML インデックスが再構成されます。When ALL is specified, relational indexes, both clustered and nonclustered, and XML indexes on the table are reorganized. ALL を指定した場合は、いくつかの制限が適用されます。「引数」の ALL の定義を参照してください。Some restrictions apply when specifying ALL, see the definition for ALL in the Arguments section.

詳細については、「 インデックスの再編成と再構築」を参照してください。For more information, see Reorganize and Rebuild Indexes.

インデックスの無効化Disabling Indexes

インデックスを無効化すると、ユーザーはインデックスにアクセスできなくなり、クラスター化インデックスの場合は基になるテーブル データにもアクセスできなくなります。Disabling an index prevents user access to the index, and for clustered indexes, to the underlying table data. インデックス定義はシステム カタログに残ります。The index definition remains in the system catalog. ビュー上で非クラスター化インデックスまたはクラスター化インデックスを物理的に無効にすると、インデックス データが削除されます。Disabling a nonclustered index or clustered index on a view physically deletes the index data. クラスター化インデックスを無効にすると、データにアクセスできなくなりますが、データはインデックスが削除または再構築されるまで B ツリーに残ります。このデータは管理されません。Disabling a clustered index prevents access to the data, but the data remains unmaintained in the B-tree until the index is dropped or rebuilt. 有効または無効なインデックスの状態を表示するクエリ、 is_disabled内の列、 sys.indexesカタログ ビューです。To view the status of an enabled or disabled index, query the is_disabled column in the sys.indexes catalog view.

テーブルがトランザクション レプリケーション パブリケーション内にある場合、主キー列に関連付けられているインデックスを無効にすることはできません。If a table is in a transactional replication publication, you cannot disable any indexes that are associated with primary key columns. これらのインデックスはレプリケーションで必要です。These indexes are required by replication. インデックスを無効にするには、まずパブリケーションからテーブルを削除する必要があります。To disable an index, you must first drop the table from the publication. 詳細については、「Publish Data and Database Objects」(データとデータベース オブジェクトのパブリッシュ) をご覧ください。For more information, see Publish Data and Database Objects.

インデックスを有効にするには、ALTER INDEX REBUILD ステートメントまたは CREATE INDEX WITH DROP_EXISTING ステートメントを使用します。Use the ALTER INDEX REBUILD statement or the CREATE INDEX WITH DROP_EXISTING statement to enable the index. ONLINE オプションが ON に設定されていると、無効化されたクラスター化インデックスを再構築できません。Rebuilding a disabled clustered index cannot be performed with the ONLINE option set to ON. 詳細については、「 インデックスと制約の無効化」を参照してください。For more information, see Disable Indexes and Constraints.

オプションの設定Setting Options

特定のインデックスに対して、再構築または再構成を行わずに ALLOW_ROW_LOCKS、ALLOW_PAGE_LOCKS、IGNORE_DUP_KEY および STATISTICS_NORECOMPUTE オプションを設定できます。You can set the options ALLOW_ROW_LOCKS, ALLOW_PAGE_LOCKS, IGNORE_DUP_KEY and STATISTICS_NORECOMPUTE for a specified index without rebuilding or reorganizing that index. 変更された値はすぐにインデックスに適用されます。The modified values are immediately applied to the index. これらの設定を表示するsys.indexesです。To view these settings, use sys.indexes. 詳細については、「 インデックス オプションの設定」を参照してください。For more information, see Set Index Options.

行およびページ ロック オプションRow and Page Locks Options

ALLOW_ROW_LOCKS = ON かつ ALLOW_PAGE_LOCK = ON の場合は、インデックスにアクセスするとき、行レベル、ページ レベル、およびテーブル レベルのロックが許可されます。When ALLOW_ROW_LOCKS = ON and ALLOW_PAGE_LOCK = ON, row-level, page-level, and table-level locks are allowed when you access the index. データベース エンジンDatabase Engine適切なロックを選択し、行またはページ ロックからテーブル ロックのロックをエスカレートすることができます。The データベース エンジンDatabase Engine chooses the appropriate lock and can escalate the lock from a row or page lock to a table lock.

ALLOW_ROW_LOCKS = OFF かつ ALLOW_PAGE_LOCK = OFF の場合は、インデックスにアクセスするときにテーブル レベルのロックだけが許可されます。When ALLOW_ROW_LOCKS = OFF and ALLOW_PAGE_LOCK = OFF, only a table-level lock is allowed when you access the index.

行またはページ ロック オプションが設定されている場合に ALL を指定すると、この設定はすべてのインデックスに適用されます。If ALL is specified when the row or page lock options are set, the settings are applied to all indexes. 基になるテーブルがヒープの場合、この設定は次のように適用されます。When the underlying table is a heap, the settings are applied in the following ways:

ALLOW_ROW_LOCKS = ON または OFFALLOW_ROW_LOCKS = ON or OFF ヒープおよび関連する非クラスター化インデックスに適用。To the heap and any associated nonclustered indexes.
ALLOW_PAGE_LOCKS = ONALLOW_PAGE_LOCKS = ON ヒープおよび関連する非クラスター化インデックスに適用。To the heap and any associated nonclustered indexes.
ALLOW_PAGE_LOCKS = OFFALLOW_PAGE_LOCKS = OFF 非クラスター化インデックスに完全に適用。Fully to the nonclustered indexes. この場合、非クラスター化インデックスではすべてのページ ロックが許可されません。This means that all page locks are not allowed on the nonclustered indexes. ヒープでは、ページに対して共有 (S)、更新 (U) および排他 (X) ロックだけが許可されなくなります。On the heap, only the shared (S), update (U) and exclusive (X) locks for the page are not allowed. データベース エンジンDatabase Engine内部処理用にインテント ページ ロック (IS、IU または IX) を引き続き取得できます。The データベース エンジンDatabase Engine can still acquire an intent page lock (IS, IU or IX) for internal purposes.

オンライン インデックス操作Online Index Operations

インデックスを再構築する場合で ONLINE オプションが ON に設定されている場合、クエリおよびデータ変更で、基になるオブジェクト、テーブルおよび関連インデックスを使用できます。When rebuilding an index and the ONLINE option is set to ON, the underlying objects, the tables and associated indexes, are available for queries and data modification. 1 つのパーティションに存在するインデックスの一部をオンラインで再構築することもできます。You can also rebuild online a portion of an index residing on a single partition. 排他テーブル ロックは、変更処理中の非常に短い時間だけ保持されます。Exclusive table locks are held only for a very short amount of time during the alteration process.

インデックスの再構成は、常にオンラインで実行されます。Reorganizing an index is always performed online. この処理ではロックが長期間保持されないので、実行中のクエリや更新はブロックされません。The process does not hold locks long term and, therefore, does not block queries or updates that are running.

同じテーブルまたはテーブル パーティションでのオンライン インデックス操作は、次の場合のみ同時に実行できます。You can perform concurrent online index operations on the same table or table partition only when doing the following:

  • 複数の非クラスター化インデックスを作成する。Creating multiple nonclustered indexes.

  • 同じテーブルで異なるインデックスを再構成する。Reorganizing different indexes on the same table.

  • 同じテーブルで重複しないインデックスを再構築する間、別のインデックスを再構成する。Reorganizing different indexes while rebuilding nonoverlapping indexes on the same table.

    その他すべてのオンライン インデックス操作は、同時に実行しようとしても失敗します。All other online index operations performed at the same time fail. たとえば、同じテーブル上で同時に複数のインデックスを再構築したり、同じテーブルで既存のインデックスを再構築する間に新しいインデックスを作成することはできません。For example, you cannot rebuild two or more indexes on the same table concurrently, or create a new index while rebuilding an existing index on the same table.

再開可能なインデックス操作Resumable index operations

適用されます: SQL Server 2017、および Azure SQL データベース (機能が公開プレビュー) で始まるApplies to: Beginning with SQL Server 2017 and Azure SQL Database (feature is in public preview)

オンライン インデックス再構築は、再開可能を使用して再開可能として指定 = ON オプション。ONLINE INDEX REBUILD is specified as resumable using the RESUMABLE=ON option.

  • 再開可能なオプションで指定されたインデックスのメタデータは保持されず、現在の DDL ステートメントの実行中にのみ適用されます。The RESUMABLE option is not persisted in the metadata for a given index and applies only to the duration of a current DDL statement. 再開可能ではそのため、= ON 句でアップロードを有効にする明示的に指定する必要があります。Therefore, the RESUMABLE=ON clause must be specified explicitly to enable resumability.

  • 2 つの異なる MAX_DURATION オプションに注意してください。Please note two different MAX_DURATION options. Low_priority_lock_wait に関連する 1 つと、再開可能に関連する他のオプションを = です。One is related to low_priority_lock_wait and the other is related to RESUMABLE=ON option.

    • 再開可能 MAX_DURATION オプションはサポートされて = ON オプションまたはlow_priority_lock_wait引数オプションです。MAX_DURATION option is supported for RESUMABLE=ON option or the low_priority_lock_wait argument option. 再開可能なオプションの MAX_DURATION には、インデックスの再構築される時間間隔を指定します。MAX_DURATION for RESUMABLE option specifies the time interval for an index being rebuild. この時間が使用されるインデックスの再構築が一時停止するか、またはの実行を完了します。Once this time is used the index rebuild is either paused or it completes its execution. ユーザーは、一時停止しているインデックスの再構築を再開できる場合を決定します。User decides when a rebuild for a paused index can be resumed. 時間MAX_DURATION を分単位でと低 0 分より大きいか等しい 1 週間 (7 x 24 x 60 = 10080 分) である必要があります。The time in minutes for MAX_DURATION must be greater than 0 minutes and less or equal one week (7 x 24 x 60= 10080 minutes). インデックス操作に長い一時停止を持つは、特定のテーブルで DML パフォーマンスに影響を与える可能性だけでなくどちらもデータベースのディスク容量のインデックスを作成元と新しく作成されたものが必要なは、ディスク スペースと DML 操作中に更新する必要があります。Having a long pause for an index operation may impact the DML performance on a specific table as well as the database disk capacity since both indexes the original one and the newly created one require disk space and need to be updated during DML operations. MAX_DURATION オプションを省略すると、その完了するまで、またはエラーが発生するまで、インデックス操作は続行されます。If MAX_DURATION option is omitted, the index operation will continue until its completion or until a failure occurs.
  • <Low_priority_lock_wait > 引数オプションでは、SCH-M ロックでブロックされたときに、インデックス操作を続行する方法を決定することができます。The <low_priority_lock_wait> argument option allows you to decide how the index operation can proceed when blocked on the SCH-M lock.

  • 同じパラメーターを持つ元の ALTER INDEX REBUILD ステートメントを再実行すると、一時停止中のインデックス再構築操作が再開されます。Re-executing the original ALTER INDEX REBUILD statement with the same parameters resumes a paused index rebuild operation. インデックスの再開の ALTER ステートメントを実行しても一時停止中のインデックス再構築の操作を再開できます。You can also resume a paused index rebuild operation by executing the ALTER INDEX RESUME statement.

  • SORT_IN_TEMPDB = ON 再開可能なインデックスのオプションがサポートされていませんThe SORT_IN_TEMPDB=ON option is not supported for resumable index
  • 再開可能で、DDL コマンド = ON は、明示的なトランザクションの内部実行ことはできません (の一部にすることはできません begin tran.The DDL command with RESUMABLE=ON cannot be executed inside an explicit transaction (cannot be part of begin tran … コミット ブロック) します。commit block).
  • 一時停止されているインデックス操作だけでは、再開します。Only index operations that are paused are resumable.
  • 一時停止しているインデックス操作を再開するときに新しい値の MAXDOP 値を変更できます。When resuming an index operation that is paused, you can change the MAXDOP value to a new value. MAXDOP が指定されていない場合は最後の MAXDOP 値を取得、一時停止しているインデックス操作を再開するとき。If MAXDOP is not specified when resuming an index operation that is paused, the last MAXDOP value is taken. MAXDOP オプションが指定されていないすべてのインデックス再構築操作の場合は、既定値を取得します。IF the MAXDOP option is not specified at all for index rebuild operation, the default value is taken.
  • インデックス操作をすぐに一時停止、継続的なコマンド (CTRL + C) を停止するまたは ALTER INDEX を一時停止コマンドまたは KILL を実行することができますsession_idコマンド。To pause immediately the index operation, you can stop the ongoing command (Ctrl-C) or you can execute the ALTER INDEX PAUSE command or the KILL session_id command. コマンドが一時停止された後再開できるように再開オプションを使用します。Once the command is paused it can be resumed using RESUME option.
  • 中止コマンドが、元のインデックス再構築がホストされているし、インデックス操作を中止するセッションを強制終了します。The ABORT command kills the session that hosted the original index rebuild and aborts the index operation
  • 追加のリソースには必要ありませんを除き、再開可能なインデックスの再構築です。No extra resources are required for resumable index rebuild except for
    • インデックスを一時停止されているときに時間も含めて、構築されるインデックスを保持するために必要な追加領域Additional space required to keep the index being built, including the time when index is being paused
    • すべての DDL 変更を防止 DDL の状態A DDL state preventing any DDL modification
  • インデックス一時停止フェーズ中に、ゴーストのクリーンアップが実行されているが、インデックスの実行中に一時停止されます。The ghost cleanup will be running during the index pause phase, but it will be paused during index run
    再開可能なインデックス再構築操作の次の機能が無効になっていますThe following functionality is disabled for resumable index rebuild operations
    • 再開可能では無効になっているインデックスを再構築はサポートされていない = ONRebuilding an index that is disabled is not supported with RESUMABLE=ON
    • ALTER INDEX REBUILD の ALL コマンドALTER INDEX REBUILD ALL command
    • インデックスの再構築を使用して ALTER TABLEALTER TABLE using index rebuild
    • DDL コマンドを"RESUMEABLE = ON"明示的なトランザクション内で実行することはできません (の一部にすることはできません begin tran.DDL command with “RESUMEABLE = ON” cannot be executed inside an explicit transaction (cannot be part of begin tran … コミット ブロック)commit block)
    • キー列としてインデックスには、計算をまたはタイムスタンプ列を再構築します。Rebuild an index that has computed or TIMESTAMP column(s) as key columns.
  • インデックスの再構築がこの操作の開始時に SCH-M ロックを必要とベース テーブルに LOB 列の再開可能なクラスター化が含まれている場合にIn case the base table contains LOB column(s) resumable clustered index rebuild requires a Sch-M lock in the beginning of this operation
    • SORT_IN_TEMPDB = ON 再開可能なインデックスのオプションがサポートされていませんThe SORT_IN_TEMPDB=ON option is not supported for resumable index
注意

DDL コマンドは、完了、一時停止か、失敗するまで実行されます。The DDL command runs until it completes, pauses or fails. コマンドが一時停止、場合に、操作が一時停止していると、インデックスの作成が完了しなかったことを示すエラーが発行されます。In case the command pauses, an error will be issued indicating that the operation was paused and that the index creation did not complete. 現在のインデックスの状態の詳細についてから取得できますsys.index_resumable_operationsです。More information about the current index status can be obtained from sys.index_resumable_operations. として前に、障害が発生した場合、エラーが発行されますもします。As before in case of a failure an error will be issued as well.

詳しくは、「 Perform Index Operations Online」をご覧ください。For more information, see Perform Index Operations Online.

オンライン インデックス操作と WAIT_AT_LOW_PRIORITYWAIT_AT_LOW_PRIORITY with online index operations

オンライン インデックス再構築の DDL ステートメントを実行するには、特定のテーブルで実行されているすべてのアクティブなブロック トランザクションが完了する必要があります。In order to execute the DDL statement for an online index rebuild, all active blocking transactions running on a particular table must be completed. オンライン インデックス再構築を実行すると、このテーブルに対する実行の開始が準備できているすべての新しいトランザクションがブロックされます。When the online index rebuild executes, it blocks all new transactions that are ready to start execution on this table. オンライン インデックス再構築のロックの期間は非常に短いですが、特定のテーブルに対して開かれているすべてのトランザクションの完了を待機し、新しいトランザクションの開始をブロックすることで、スループットに大きな影響を与える場合があり、ワークロードの速度低下またはタイムアウトを引き起こしたり、基になるテーブルへのアクセスが大幅に制限されたりします。Although the duration of the lock for online index rebuild is very short, waiting for all open transactions on a given table to complete and blocking the new transactions to start, might significantly affect the throughput, causing a workload slow down or timeout, and significantly limit access to the underlying table. WAIT_AT_LOW_PRIORITYオプションでは、DBA がオンラインのインデックスが再構築、3 つのオプションのいずれかを選択することができますに必要な S ロックおよび SCH-M ロックを管理します。The WAIT_AT_LOW_PRIORITY option allows DBA's to manage the S-lock and Sch-M locks required for online index rebuilds and allows them to select one of 3 options. 待機時間の実行中に、すべての 3 つのケースで ( (MAX_DURATION = n [minutes]) )、ブロッキング アクティビティがない、待機せず、オンライン インデックス再構築をすぐに実行および DDL ステートメントが完了します。In all 3 cases, if during the wait time ( (MAX_DURATION = n [minutes]) ), there are no blocking activities, the online index rebuild is executed immediately without waiting and the DDL statement is completed.

空間インデックスに関する制限Spatial Index Restrictions

空間インデックスを再構築するとき、基になるユーザー テーブルはインデックス操作の間使用できなくなります。これは、空間インデックスがスキーマ ロックを保持するためです。When you rebuild a spatial index, the underlying user table is unavailable for the duration of the index operation because the spatial index holds a schema lock.

ユーザー テーブルの PRIMARY KEY 制約は、そのテーブルの列に空間インデックスが定義されているときは変更できません。The PRIMARY KEY constraint in the user table cannot be modified while a spatial index is defined on a column of that table. PRIMARY KEY 制約を変更する場合は、初めにテーブルのすべての空間インデックスを削除してください。To change the PRIMARY KEY constraint, first drop every spatial index of the table. PRIMARY KEY 制約を変更した後、各空間インデックスを再作成できます。After modifying the PRIMARY KEy constraint, you can re-create each of the spatial indexes.

単一のパーティションの再構築操作では、空間インデックスを指定できません。In a single partition rebuild operation, you cannot specify any spatial indexes. ただし、パーティションの完全な再構築では、空間インデックスを指定できます。However, you can specify spatial indexes in a complete partition rebuild.

BOUNDING_BOX や GRID など、空間インデックス固有のオプションを変更するには、DROP_EXISTING = ON を指定する CREATE SPATIAL INDEX ステートメントを使用するか、空間インデックスを削除して新しく作成します。To change options that are specific to a spatial index, such as BOUNDING_BOX or GRID, you can either use a CREATE SPATIAL INDEX statement that specifies DROP_EXISTING = ON, or drop the spatial index and create a new one. 例については、「 CREATE SPATIAL INDEX (Transact-SQL)」の「解説」をご覧ください。For an example, see CREATE SPATIAL INDEX (Transact-SQL).

Data CompressionData Compression

データ圧縮の詳細については、「 データの圧縮」を参照してください。For a more information about data compression, see Data Compression.

影響を評価するページと行の圧縮を変更するは、テーブル、インデックス、またはパーティションを使用して、 sp_estimate_data_compression_savingsストアド プロシージャです。To evaluate how changing PAGE and ROW compression will affect a table, an index, or a partition, use the sp_estimate_data_compression_savings stored procedure.

パーティション インデックスには次の制限が適用されます。The following restrictions apply to partitioned indexes:

  • 使用するとALTER INDEX ALL ...、圧縮設定の 1 つのパーティション テーブルに変更することはできません固定されていないインデックスです。When you use ALTER INDEX ALL ..., you cannot change the compression setting of a single partition if the table has nonaligned indexes.

  • ALTER INDEX <index >.REBUILD PARTITION ... 構文は、そのインデックスの指定のパーティションを再構築します。The ALTER INDEX <index> ... REBUILD PARTITION ... syntax rebuilds the specified partition of the index.

  • ALTER INDEX <index >.REBUILD WITH ... 構文は、そのインデックスのすべてのパーティションを再構築します。The ALTER INDEX <index> ... REBUILD WITH ... syntax rebuilds all partitions of the index.

統計Statistics

実行するとALTER INDEX ALL しています.When you execute ALTER INDEX ALL … テーブルにのみ、統計情報に関連付けられたインデックスが更新されます。on a table, only the statistics associates with indexes are updated. (インデックスではなく) テーブルで作成されている自動または手動の統計は更新されません。Automatic or manual statistics created on the table (instead of an index) are not updated.

PermissionsPermissions

ALTER INDEX を実行するには、少なくとも、テーブルまたはビューの ALTER 権限が必要です。To execute ALTER INDEX, at a minimum, ALTER permission on the table or view is required.

バージョンのメモVersion Notes

  • SQL データベースでは、ファイル グループと filestream オプションを使用しません。SQL Database does not use filegroup and filestream options.

  • 列ストア インデックスは、SQL Server 2012 より前にご利用いただけません。Columnstore indexes are not available prior to SQL Server 2012.

  • 再開可能なインデックス操作は、SQL Server 2017、および Azure SQL データベース (機能は、パブリック プレビューで) から使用可能 |Resumable index operations are available beginning with SQL Server 2017 and Azure SQL Database (feature is in public preview)|

基本構文例:Basic syntax example:

ALTER INDEX index1 ON table1 REBUILD;  

ALTER INDEX ALL ON table1 REBUILD;  

ALTER INDEX ALL ON dbo.table1 REBUILD;  

例: 列ストア インデックスExamples: Columnstore Indexes

これらの例は、列ストア インデックスに適用されます。These examples apply to columnstore indexes.

A.A. デモを再構成します。REORGANIZE demo

この例では、ALTER INDEX REORGANIZE コマンドの動作方法を示します。This example demonstrates how the ALTER INDEX REORGANIZE command works. 複数の行グループと REORGANIZE が行グループを結合する方法を次に示しますあるテーブルを作成します。It creates a table that has multiple rowgroups, and then demonstrates how REORGANIZE merges the rowgroups.

-- Create a database   
CREATE DATABASE [ columnstore ];  
GO  

-- Create a rowstore staging table  
CREATE TABLE [ staging ] (  
     AccountKey              int NOT NULL,  
     AccountDescription      nvarchar (50),  
     AccountType             nvarchar(50),  
     AccountCodeAlternateKey     int  
     )  

-- Insert 10 million rows into the staging table.   
DECLARE @loop int  
DECLARE @AccountDescription varchar(50)  
DECLARE @AccountKey int  
DECLARE @AccountType varchar(50)  
DECLARE @AccountCode int  

SELECT @loop = 0  
BEGIN TRAN  
    WHILE (@loop < 300000)   
      BEGIN  
        SELECT @AccountKey = CAST (RAND()*10000000 as int);  
        SELECT @AccountDescription = 'accountdesc ' + CONVERT(varchar(20), @AccountKey);  
        SELECT @AccountType = 'AccountType ' + CONVERT(varchar(20), @AccountKey);  
        SELECT @AccountCode =  CAST (RAND()*10000000 as int);  

        INSERT INTO  staging VALUES (@AccountKey, @AccountDescription, @AccountType, @AccountCode);  

        SELECT @loop = @loop + 1;  
    END  
COMMIT  

-- Create a table for the clustered columnstore index  

CREATE TABLE cci_target (  
     AccountKey              int NOT NULL,  
     AccountDescription      nvarchar (50),  
     AccountType             nvarchar(50),  
     AccountCodeAlternateKey int  
     )  

-- Convert the table to a clustered columnstore index named inxcci_cci_target;  
```tsql
CREATE CLUSTERED COLUMNSTORE INDEX idxcci_cci_target ON cci_target;  

TABLOCK オプションを使用すると、並列で行を挿入できます。Use the TABLOCK option to insert rows in parallel. SQL Server 2016 以降では、INSERT INTO 操作を並列実行 TABLOCK を使用するとします。Starting with SQL Server 2016, the INSERT INTO operation can run in parallel when TABLOCK is used.

INSERT INTO cci_target WITH (TABLOCK) 
SELECT TOP 300000 * FROM staging;  

開いているデルタ行グループの数を表示するには、このコマンドを実行します。Run this command to see the OPEN delta rowgroups. 行グループの数は、並列処理の次数に依存します。The number of rowgroups depends on the degree of parallelism.

SELECT *   
FROM sys.dm_db_column_store_row_group_physical_stats   
WHERE object_id  = object_id('cci_target');  

すべての CLOSED と OPEN 行グループを列ストアに強制的にこのコマンドを実行します。Run this command to force all CLOSED and OPEN rowgroups into the columnstore.

ALTER INDEX idxcci_cci_target ON cci_target REORGANIZE WITH (COMPRESS_ALL_ROW_GROUPS = ON);  

このコマンドを再実行して、小さな行グループが圧縮された行グループの 1 つにマージされたことが表示されます。Run this command again and you will see that smaller rowgroups are merged into one compressed rowgroup.

ALTER INDEX idxcci_cci_target ON cci_target REORGANIZE WITH (COMPRESS_ALL_ROW_GROUPS = ON);  

B.B. 閉じられたデルタ行グループを列ストアに圧縮します。Compress CLOSED delta rowgroups into the columnstore

この例は、REORGANIZE オプションを圧縮閉じられたデルタ行グループはそれぞれ、列ストアに圧縮された行グループとします。This example uses the REORGANIZE option to compresses each CLOSED delta rowgroup into the columnstore as a compressed rowgroup. これは必要ありませんが、組ムーバーが十分に高速の CLOSED 行グループを圧縮しない場合に便利です。This is not necessary, but is useful when the tuple-mover is not compressing CLOSED rowgroups fast enough.

-- Uses AdventureWorksDW  
-- REORGANIZE all partitions  
ALTER INDEX cci_FactInternetSales2 ON FactInternetSales2 REORGANIZE;  

-- REORGANIZE a specific partition  
ALTER INDEX cci_FactInternetSales2 ON FactInternetSales2 REORGANIZE PARTITION = 0;  

C.C. 列ストアにすべて開くと終了のデルタ行グループを圧縮します。Compress all OPEN AND CLOSED delta rowgroups into the columnstore

適用されません SQL Server 2012 および 2014。Does not apply to: SQL Server 2012 and 2014

SQL Server 2016 以降では、次のように再構成で実行できます (COMPRESS_ALL_ROW_GROUPS = ON) を圧縮行グループと列ストアに各オープンとクローズのデルタ行グループを圧縮します。Starting with SQL Server 2016, you can run REORGANIZE WITH ( COMPRESS_ALL_ROW_GROUPS =ON ) to compress each OPEN and CLOSED delta rowgroup into the columnstore as a compressed rowgroup. これは、デルタストアを空にして、強制的にすべての行を列ストアに圧縮します。This empties the deltastores and forces all rows to get compressed into the columnstore. これは、これらの操作が 1 つまたは複数のデルタストアの行を格納するために、多くの挿入操作を実行した後に特に便利です。This is useful especially after performing many insert operations since these operations store the rows in one or more deltastores.

REORGANIZE は、行の最大数までの行グループを入力する行グループを結合<1,024,576 を = です。REORGANIZE combines rowgroups to fill rowgroups up to a maximum number of rows <= 1,024,576. そのため、オープンとクローズのすべての行グループを圧縮するときにするために終了しない圧縮された行グループのみに、いくつかの行を持つ多数のです。Therefore, when you compress all OPEN and CLOSED rowgroups you won't end up with lots of compressed rowgroups that only have a few rows in them. 圧縮サイズを小さくし、クエリのパフォーマンスを向上させるできるだけにいっぱいになっている行グループができます。You want rowgroups to be as full as possible to reduce the compressed size and improve query performance.

-- Uses AdventureWorksDW2016  
-- Move all OPEN and CLOSED delta rowgroups into the columnstore.  
ALTER INDEX cci_FactInternetSales2 ON FactInternetSales2 REORGANIZE WITH (COMPRESS_ALL_ROW_GROUPS = ON);  

-- For a specific partition, move all OPEN AND CLOSED delta rowgroups into the columnstore  
ALTER INDEX cci_FactInternetSales2 ON FactInternetSales2 REORGANIZE PARTITION = 0 WITH (COMPRESS_ALL_ROW_GROUPS = ON);  

D.D. 列ストア インデックスをオンラインの最適化します。Defragment a columnstore index online

適用されません。 SQL Server 2012 および 2014 です。Does not apply to: SQL Server 2012 and 2014.

SQL Server 2016 以降では、REORGANIZE は複数の圧縮のデルタ行グループ、列ストアにします。Starting with SQL Server 2016, REORGANIZE does more than compress delta rowgroups into the columnstore. また、オンラインでの最適化を実行します。It also performs online defragmentation. 最初に、行グループ内の行の 10% 以上が削除されたときに物理的に削除された行を削除することで、列ストアのサイズが軽減されます。First, it reduces the size of the columnstore by physically removing deleted rows when 10% or more of the rows in a rowgroup have been deleted. 次を 1,024,576 行の行グループあたりの最大値持つ大規模な行グループを形成する行グループを結合します。Then, it combines rowgroups together to form larger rowgroups that have up to the maximum of 1,024,576 rows per rowgroups. すべての行グループを変更しても再圧縮します。All rowgroups that are changed get re-compressed.

注意

SQL Server 2016 以降では、列ストア インデックスを再構築する必要はなくなりましたほとんどの状況で REORGANIZE は物理的に削除された行を削除し、行グループのマージ以降。Starting with SQL Server 2016, rebuilding a columnstore index is no longer necessary in most situations since REORGANIZE physically removes deleted rows and merges rowgroups. COMPRESS_ALL_ROW_GROUPS オプションは、以前、再構築でのみ実行でしたが、列ストアにすべて開くまたは CLOSED のデルタ行グループを強制します。The COMPRESS_ALL_ROW_GROUPS option forces all OPEN or CLOSED delta rowgroups into the columnstore which previously could only be done with a rebuild. REORGANIZE はオンラインであり、操作が発生すると、クエリを継続できるようにバック グラウンドで発生します。REORGANIZE is online and occurs in the background so queries can continue as the operation happens.

-- Uses AdventureWorks  
-- Defragment by physically removing rows that have been logically deleted from the table, and merging rowgroups.  
ALTER INDEX cci_FactInternetSales2 ON FactInternetSales2 REORGANIZE;  

E.E. オフラインのクラスター化列ストア インデックスを再構築します。Rebuild a clustered columnstore index offline

適用されます SQL Server 2012、SQL Server 2014。Applies to: SQL Server 2012, SQL Server 2014

SQL Server 2016 でから始まり Azure SQL データベースAzure SQL Database、ALTER INDEX REBUILD の代わりに ALTER INDEX REORGANIZE を使用することをお勧めします。Starting with SQL Server 2016 and in Azure SQL データベースAzure SQL Database, we recommend using ALTER INDEX REORGANIZE instead of ALTER INDEX REBUILD.

注意

SQL Server 2012 および 2014 では、REORGANIZE は、列ストアに CLOSED 行グループを圧縮するのみ使用されます。In SQL Server 2012 and 2014, REORGANIZE is only used to compress CLOSED rowgroups into the columnstore. 唯一の方法を最適化操作を実行して、列ストアに強制的にすべてのデルタ行グループには、インデックスを再構築します。The only way to perform defragmentation operations and to force all delta rowgroups into the columnstore is to rebuild the index.

この例では、クラスター化列ストア インデックスを再構築し、すべてのデルタ行グループ、列ストアに強制的に移動する方法を示します。This example shows how to rebuild a clustered columnstore index and force all delta rowgroups into the columnstore. この最初の手順では、クラスター化列ストア インデックスを含む FactInternetSales2 テーブルを準備し、最初の 4 つの列にデータを挿入します。This first step prepares a table FactInternetSales2 with a clustered columnstore index and inserts data from the first four columns.

-- Uses AdventureWorksDW  

CREATE TABLE dbo.FactInternetSales2 (  
    ProductKey [int] NOT NULL,   
    OrderDateKey [int] NOT NULL,   
    DueDateKey [int] NOT NULL,   
    ShipDateKey [int] NOT NULL);  

CREATE CLUSTERED COLUMNSTORE INDEX cci_FactInternetSales2  
ON dbo.FactInternetSales2;  

INSERT INTO dbo.FactInternetSales2  
SELECT ProductKey, OrderDateKey, DueDateKey, ShipDateKey  
FROM dbo.FactInternetSales;  

SELECT * FROM sys.column_store_row_groups;  

1 つ開いている行グループ、つまり、結果を表示する SQL ServerSQL Serverは多くの行のデータを列ストアに移動して、行グループを終了する前に追加するまで待機します。The results show there is one OPEN rowgroup, which means SQL ServerSQL Server will wait for more rows to be added before it closes the rowgroup and moves the data to the columnstore. 次のステートメントは、列ストアに強制的にすべての行をクラスター化列ストア インデックスを再構築します。This next statement rebuilds the clustered columnstore index, which forces all rows into the columnstore.

ALTER INDEX cci_FactInternetSales2 ON FactInternetSales2 REBUILD;  
SELECT * FROM sys.column_store_row_groups;  

SELECT ステートメントの結果は行グループが圧縮されていることを示しています。つまり、行グループの列セグメントは圧縮され、列ストアに格納されます。The results of the SELECT statement show the rowgroup is COMPRESSED, which means the column segments of the rowgroup are now compressed and stored in the columnstore.

F.F. オフラインのクラスター化列ストア インデックスのパーティションを再構築します。Rebuild a partition of a clustered columnstore index offline

これを使用する: SQL Server 2012、SQL Server 2014Use this for: SQL Server 2012, SQL Server 2014

大規模なクラスター化列ストア インデックスのパーティションを再構築するには、パーティション オプションで ALTER INDEX REBUILD を使用します。To rebuild a partition of a large clustered columnstore index, use ALTER INDEX REBUILD with the partition option. この例では、12 のパーティションが再構築します。This example rebuilds partition 12. SQL Server 2016 以降では、REORGANIZE と再構築を置き換えることお勧めします。Starting with SQL Server 2016, we recommend replacing REBUILD with REORGANIZE.

ALTER INDEX cci_fact3   
ON fact3  
REBUILD PARTITION = 12;  

G.G. 保存用圧縮を使用する columstore のクラスター化インデックスを変更します。Change a clustered columstore index to use archival compression

適用されません SQL Server 2012。Does not apply to: SQL Server 2012

COLUMNSTORE_ARCHIVE データ圧縮オプションを使用して、さらに、クラスター化列ストア インデックスのサイズを小さくことができます。You can choose to reduce the size of a clustered columnstore index even further by using the COLUMNSTORE_ARCHIVE data compression option. これは、安価なストレージを保持する以前のデータに対する実用性です。This is practical for older data that you want to keep on cheaper storage. のみを使用してこれが多くの場合、以降にアクセスされないデータを圧縮解除が通常の列ストア圧縮でよりも遅いことをお勧めします。We recommend only using this on data that is not accessed often since decompress is slower than with the normal COLUMNSTORE compression.

次の例では、保存用圧縮を使用するクラスター化列ストア インデックスを再構築し、次に保管用圧縮を削除する方法を示します。The following example rebuilds a clustered columnstore index to use archival compression, and then shows how to remove the archival compression. 最終結果では、列ストア圧縮のみを使用します。The final result will use only columnstore compression.

--Prepare the example by creating a table with a clustered columnstore index.  
CREATE TABLE SimpleTable (  
    ProductKey [int] NOT NULL,   
    OrderDateKey [int] NOT NULL,   
    DueDateKey [int] NOT NULL,   
    ShipDateKey [int] NOT NULL  
);  

CREATE CLUSTERED INDEX cci_SimpleTable ON SimpleTable (ProductKey);  

CREATE CLUSTERED COLUMNSTORE INDEX cci_SimpleTable  
ON SimpleTable  
WITH (DROP_EXISTING = ON);  

--Compress the table further by using archival compression.  
ALTER INDEX cci_SimpleTable ON SimpleTable  
REBUILD  
WITH (DATA_COMPRESSION = COLUMNSTORE_ARCHIVE);  

--Remove the archive compression and only use columnstore compression.  
ALTER INDEX cci_SimpleTable ON SimpleTable  
REBUILD  
WITH (DATA_COMPRESSION = COLUMNSTORE);  
GO  

例: 行ストア インデックスExamples: Rowstore indexes

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

次の例で、単一のインデックスを再構築、Employeeテーブルに、 AdventureWorks2012AdventureWorks2012データベース。The following example rebuilds a single index on the Employee table in the AdventureWorks2012AdventureWorks2012 database.

ALTER INDEX PK_Employee_EmployeeID ON HumanResources.Employee REBUILD;  

B.B. テーブルですべてのインデックスを再構築し、オプションを指定するRebuilding all indexes on a table and specifying options

次の例は、キーワードを指定ALLです。The following example specifies the keyword ALL. これにより、 AdventureWorks2012AdventureWorks2012 データベースの Production.Product テーブルに関連付けられたすべてのインデックスが再構築されます。This rebuilds all indexes associated with the table Production.Product in the AdventureWorks2012AdventureWorks2012 database. 3 つのオプションが指定されます。Three options are specified.

適用されます: SQL Server (SQL Server 2008 以降) と Azure SQL データベースです。Applies to: SQL Server (starting with SQL Server 2008) and Azure SQL Database.

ALTER INDEX ALL ON Production.Product  
REBUILD WITH (FILLFACTOR = 80, SORT_IN_TEMPDB = ON, STATISTICS_NORECOMPUTE = ON);  

次の例は、優先度の低いロック オプションを含めて ONLINE オプションを追加し、行の圧縮オプションを追加します。The following example adds the ONLINE option including the low priority lock option, and adds the row compression option.

適用されます: SQL Server (SQL Server 2014 以降) と Azure SQL データベースです。Applies to: SQL Server (starting with SQL Server 2014) and Azure SQL Database.

ALTER INDEX ALL ON Production.Product  
REBUILD WITH   
(  
    FILLFACTOR = 80,   
    SORT_IN_TEMPDB = ON,  
    STATISTICS_NORECOMPUTE = ON,  
    ONLINE = ON ( WAIT_AT_LOW_PRIORITY ( MAX_DURATION = 4 MINUTES, ABORT_AFTER_WAIT = BLOCKERS ) ),   
    DATA_COMPRESSION = ROW  
);  

C.C. LOB 圧縮を行いインデックスを再構成するReorganizing an index with LOB compaction

次の例では、 AdventureWorks2012AdventureWorks2012 データベースの単一のクラスター化インデックスを再構成します。The following example reorganizes a single clustered index in the AdventureWorks2012AdventureWorks2012 database. インデックスではリーフ レベルに LOB データ型が含まれるので、このステートメントではラージ オブジェクト データを含むすべてのページが圧縮されます。Because the index contains a LOB data type in the leaf level, the statement also compacts all pages that contain the large object data. 既定値が ON であるため、WITH (LOB_COMPACTION) オプションの指定は必須ではありません。Note that specifying the WITH (LOB_COMPACTION) option is not required because the default value is ON.

ALTER INDEX PK_ProductPhoto_ProductPhotoID ON Production.ProductPhoto REORGANIZE WITH (LOB_COMPACTION);  

D.D. インデックスにオプションを設定するSetting options on an index

次の例では、 AdventureWorks2012AdventureWorks2012 データベースのインデックス AK_SalesOrderHeader_SalesOrderNumber にいくつかのオプションを設定します。The following example sets several options on the index AK_SalesOrderHeader_SalesOrderNumber in the AdventureWorks2012AdventureWorks2012 database.

適用されます: SQL Server (SQL Server 2008 以降) と Azure SQL データベースです。Applies to: SQL Server (starting with SQL Server 2008) and Azure SQL Database.

ALTER INDEX AK_SalesOrderHeader_SalesOrderNumber ON  
    Sales.SalesOrderHeader  
SET (  
    STATISTICS_NORECOMPUTE = ON,  
    IGNORE_DUP_KEY = ON,  
    ALLOW_PAGE_LOCKS = ON  
    ) ;  
GO

E.E. インデックスを無効にするDisabling an index

次の例は、非クラスター化インデックスを無効になります、Employeeテーブルに、 AdventureWorks2012AdventureWorks2012データベース。The following example disables a nonclustered index on the Employee table in the AdventureWorks2012AdventureWorks2012 database.

ALTER INDEX IX_Employee_ManagerID ON HumanResources.Employee DISABLE;

F.F. 制約を無効化するDisabling constraints

次の例で主キー インデックスを無効にすると、PRIMARY KEY 制約を無効になります、 AdventureWorks2012AdventureWorks2012データベース。The following example disables a PRIMARY KEY constraint by disabling the PRIMARY KEY index in the AdventureWorks2012AdventureWorks2012 database. 基になるテーブルに対する FOREIGN KEY 制約は自動的に無効になり、警告メッセージが表示されます。The FOREIGN KEY constraint on the underlying table is automatically disabled and warning message is displayed.

ALTER INDEX PK_Department_DepartmentID ON HumanResources.Department DISABLE;  

結果セットでは、次の警告メッセージが返されます。The result set returns this warning message.

Warning: Foreign key 'FK_EmployeeDepartmentHistory_Department_DepartmentID'  
on table 'EmployeeDepartmentHistory' referencing table 'Department'  
was disabled as a result of disabling the index 'PK_Department_DepartmentID'.

G.G. 制約を有効にするEnabling constraints

次の例では、例 F で無効にした PRIMARY KEY および FOREIGN KEY 制約を有効にします。The following example enables the PRIMARY KEY and FOREIGN KEY constraints that were disabled in Example F.

PRIMARY KEY 制約は、PRIMARY KEY インデックスを再構築することにより有効にできます。The PRIMARY KEY constraint is enabled by rebuilding the PRIMARY KEY index.

ALTER INDEX PK_Department_DepartmentID ON HumanResources.Department REBUILD;  

次に FOREIGN KEY 制約を有効にします。The FOREIGN KEY constraint is then enabled.

ALTER TABLE HumanResources.EmployeeDepartmentHistory  
CHECK CONSTRAINT FK_EmployeeDepartmentHistory_Department_DepartmentID;  
GO  

H.H. パーティション インデックスを再構築するRebuilding a partitioned index

次の例には、1 つのパーティション、パーティション番号が再構築5、パーティション インデックスのIX_TransactionHistory_TransactionDateで、 AdventureWorks2012AdventureWorks2012データベース。The following example rebuilds a single partition, partition number 5, of the partitioned index IX_TransactionHistory_TransactionDate in the AdventureWorks2012AdventureWorks2012 database. パーティション 5 はオンラインで再構築され、優先度の低いロックの 10 分間の待機時間が、インデックスの再構築操作によって取得された各ロックに個別に適用されます。Partition 5 is rebuilt online and the 10 minutes wait time for the low priority lock applies separately to every lock acquired by index rebuild operation. この期間中に、インデックスの再構築を完了するためのロックを取得できない場合は、再構築操作のステートメントが中止されます。If during this time the lock cannot be obtained to complete index rebuild, the rebuild operation statement is aborted.

適用されます: SQL Server (SQL Server 2014 以降) と Azure SQL データベースです。Applies to: SQL Server (starting with SQL Server 2014) and Azure SQL Database.

-- Verify the partitioned indexes.  
SELECT *  
FROM sys.dm_db_index_physical_stats (DB_ID(),OBJECT_ID(N'Production.TransactionHistory'), NULL , NULL, NULL);  
GO  
--Rebuild only partition 5.  
ALTER INDEX IX_TransactionHistory_TransactionDate  
ON Production.TransactionHistory  
REBUILD Partition = 5   
   WITH (ONLINE = ON (WAIT_AT_LOW_PRIORITY (MAX_DURATION = 10 minutes, ABORT_AFTER_WAIT = SELF)));  
GO  

I.I. インデックスの圧縮設定を変更するChanging the compression setting of an index

次の例では、非パーティション行ストア テーブルのインデックスを再構築します。The following example rebuilds an index on a nonpartitioned rowstore table.

ALTER INDEX IX_INDEX1   
ON T1  
REBUILD   
WITH (DATA_COMPRESSION = PAGE);  
GO  

追加のデータ圧縮例については、次を参照してください。データ圧縮です。For additional data compression examples, see Data Compression.

J.J. 再開可能なオンラインのインデックス再構築Online resumable index rebuild

適用されます: SQL Server 2017、および Azure SQL データベース (機能が公開プレビュー) で始まるApplies to: Beginning with SQL Server 2017 and Azure SQL Database (feature is in public preview)

次の例では、再開可能なオンラインのインデックス再構築を使用する方法を示します。The following examples show how to use online resumable index rebuild.

  1. MAXDOP で再開可能な操作として、オンライン インデックス再構築を実行 = 1 です。Execute an online index rebuild as resumable operation with MAXDOP=1.

    ALTER INDEX test_idx on test_table REBUILD WITH (ONLINE=ON, MAXDOP=1, RESUMABLE=ON) ;
    
  2. 同じを実行するコマンドをもう一度 (上記参照)、インデックス操作が一時停止された後に自動的に再開されますインデックス再構築操作。Executing the same command again (see above) after an index operation was paused, resumes automatically the index rebuild operation.

  3. 240 分に設定された MAX_DURATION 再開可能な操作として、オンライン インデックス再構築を実行します。Execute an online index rebuild as resumable operation with MAX_DURATION set to 240 minutes.

    ALTER INDEX test_idx on test_table REBUILD WITH (ONLINE=ON, RESUMABLE=ON, MAX_DURATION=240) ; 
    
  4. 再開可能な実行中のオンライン インデックス再構築を一時停止します。Pause a running resumable online index rebuild.

    ALTER INDEX test_idx on test_table PAUSE ;
    
  5. MAXDOP の新しい値を指定する再開操作が 4 に設定するように実行されたインデックスの再構築のオンラインのインデックスの再構築を再開します。Resume an online index rebuild for an index rebuild that was executed as resumable operation specifying a new value for MAXDOP set to 4.

    ALTER INDEX test_idx on test_table RESUME WITH (MAXDOP=4) ;
    
  6. インデックスのオンライン再構築となり、再開可能として実行されたオンライン インデックス再構築操作を再開します。Resume an online index rebuild operation for an index online rebuild that was executed as resumable. MAXDOP は 2 に設定、240 分、10 分間、ロック待機でブロックされている、インデックスの場合、resmumable として実行されているインデックスの実行時間を設定し、その後、すべてのブロックを強制終了します。Set MAXDOP to 2, set the execution time for the index being running as resmumable to 240 minutes and in case of an index being blocked on the lock wait 10 minutes and after that kill all blockers.

       ALTER INDEX test_idx on test_table  
          RESUME WITH (MAXDOP=2, MAX_DURATION= 240 MINUTES, 
          WAIT_AT_LOW_PRIORITY (MAX_DURATION=10, ABORT_AFTER_WAIT=BLOCKERS)) ;
    
  7. 実行中または一時停止中は再開可能なインデックス再構築操作を中止します。Abort resumable index rebuild operation which is running or paused.

    ALTER INDEX test_idx on test_table ABORT ;
    

参照See Also

CREATE INDEX (Transact-SQL) CREATE INDEX (Transact-SQL)
空間インデックス ( を作成します。TRANSACT-SQL と #41 です。 CREATE SPATIAL INDEX (Transact-SQL)
XML インデックス ( を作成します。TRANSACT-SQL と #41 です。 CREATE XML INDEX (Transact-SQL)
DROP INDEX & #40 です。TRANSACT-SQL と #41 です。 DROP INDEX (Transact-SQL)
インデックスと制約を無効にします。 Disable Indexes and Constraints
XML インデックス (SQL Server) XML Indexes (SQL Server)
オンラインのインデックス操作を実行します。 Perform Index Operations Online
Reorganize し、インデックスを再構築 Reorganize and Rebuild Indexes
sys.dm_db_index_physical_stats (Transact-SQL) sys.dm_db_index_physical_stats (Transact-SQL)
EVENTDATA (Transact-SQL)EVENTDATA (Transact-SQL)