index_option (Transact-SQL)

ALTER TABLE で作成される制約定義の一部であるインデックスに適用できる一連のオプションを指定します。

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

構文

{ 
    PAD_INDEX = { ON | OFF }
  | FILLFACTOR = fillfactor
  | IGNORE_DUP_KEY = { ON | OFF }
  | STATISTICS_NORECOMPUTE = { ON | OFF }
  | ALLOW_ROW_LOCKS = { ON | OFF }
  | ALLOW_PAGE_LOCKS = { ON | OFF }
  | SORT_IN_TEMPDB = { ON | OFF } 
  | ONLINE = { ON | OFF }
  | MAXDOP = max_degree_of_parallelism
  | DATA_COMPRESSION = { NONE |ROW | PAGE}
      [ ON PARTITIONS ( { <partition_number_expression> | <range> } 
            [ , ...n ] ) ]
}

<range> ::= 
<partition_number_expression> TO <partition_number_expression>

<single_partition_rebuild__option> ::=
{
    SORT_IN_TEMPDB = { ON | OFF }
  | MAXDOP = max_degree_of_parallelism
  | DATA_COMPRESSION = {NONE | ROW | PAGE } }
}

引数

  • PAD_INDEX = { ON | OFF }
    インデックスの埋め込みを指定します。既定値は OFF です。

    • ON
      FILLFACTOR で指定された空き容量の割合が、インデックスの中間レベル ページに適用されます。

    • OFF または fillfactor の指定なし
      中間レベル ページは、中間ページの一連のキーを考慮しつつ、インデックスが持つことのできる最大サイズの行が少なくとも 1 つ格納できる領域を残して、ほぼ容量いっぱいに使用されます。

  • FILLFACTOR **=**fillfactor
    インデックスの作成時または変更時に、データベース エンジンが各インデックス ページのリーフ レベルをどの程度まで埋めるかを、パーセント値で指定します。1 ~ 100 の整数値を指定する必要があります。既定値は 0 です。

    注意

    FILL FACTOR 値 0 と 100 は、すべての面でまったく同じ結果になります。

  • IGNORE_DUP_KEY = { ON | OFF }
    挿入操作で、一意のインデックスに重複するキーの値を挿入しようとしたときのエラー応答を指定します。IGNORE_DUP_KEY オプションは、インデックスが作成または再構築された後の挿入操作のみに適用されます。このオプションは、CREATE INDEXALTER INDEX、または UPDATE の実行には影響しません。既定値は OFF です。

    • ON
      重複したキー値が一意のインデックスに挿入されると、警告メッセージが発行されます。一意性制約に違反する行のみが失敗します。

    • OFF
      重複したキー値が一意のインデックスに挿入されると、エラー メッセージが発行されます。INSERT 操作全体がロールバックされます。

    ビューで作成されるインデックス、XML インデックス、一意ではないインデックス、空間インデックス、およびフィルタ選択されたインデックスに対して、IGNORE_DUP_KEY は ON に設定できません。

    IGNORE_DUP_KEY を表示するには、sys.indexes を使用します。

    旧バージョンと互換性のある構文では、WITH IGNORE_DUP_KEY は WITH IGNORE_DUP_KEY = ON と同じです。

  • STATISTICS_NORECOMPUTE = { ON | OFF }
    統計を再計算するかどうかを指定します。既定値は OFF です。

    • ON
      古い統計値は自動的に再計算されません。

    • OFF
      統計値の自動的な更新が有効になります。

  • ALLOW_ROW_LOCKS = { ON | OFF }
    行ロックを許可するかどうかを指定します。既定値は ON です。

    • ON
      インデックスにアクセスするとき、行ロックが許可されます。いつ行ロックを使用するかは、データベース エンジンによって決定されます。

    • OFF
      行ロックは使用されません。

  • ALLOW_PAGE_LOCKS = { ON | OFF }
    ページ ロックを許可するかどうかを指定します。既定値は ON です。

    • ON
      インデックスにアクセスするとき、ページ ロックが許可されます。いつページ ロックを使用するかは、データベース エンジンによって決定されます。

    • OFF
      ページ ロックは使用されません。

  • SORT_IN_TEMPDB = { ON | OFF }
    並べ替えの結果を tempdb に格納するかどうかを指定します。既定値は OFF です。

    • ON
      インデックスの構築に使用される並べ替えの中間結果が、tempdb に格納されます。この場合、tempdb がユーザー データベースとは別のディスク セット上に存在すると、インデックスの作成にかかる時間を短縮できますが、インデックスの構築中に使用されるディスク領域のサイズは増加します。

    • OFF
      並べ替えの中間結果が、インデックスと同じデータベースに格納されます。

  • ONLINE = { ON | OFF }
    インデックス操作中に、基となるテーブルとそれに関連する各インデックスに対してクエリやデータ変更を行うことができるかどうかを指定します。既定値は OFF です。

    注意

    一意な非クラスタ化インデックスはオンラインで作成できません。これには、UNIQUE 制約または PRIMARY KEY 制約によって作成されるインデックスが含まれます。

    • ON
      インデックス操作中、長期間のテーブル ロックは保持されません。インデックス操作の主要フェーズの間、ソース テーブルではインテント共有 (IS) ロックのみが保持されます。これにより、基になるテーブルとインデックスに対するクエリや更新は続行できます。操作の開始時、非常に短い時間ですが、ソース オブジェクトでは共有 (S) ロックが保持されます。操作の終了時、短い時間ですが、非クラクタ化インデックスが作成される場合は、ソース オブジェクト上で共有 (S) ロックの取得が行われます。また、クラスタ化インデックスがオンラインで作成または削除され、クラスタ化または非クラスタ化インデックスが再構築される場合は、SCH-M (スキーマ修正) ロックが取得されます。インデックスがローカル一時テーブルで作成される場合は、ONLINE は ON にできません。

    • OFF
      テーブル ロックは、インデックス操作の間適用されます。クラスタ化インデックスを作成、再構築、または削除するオフライン インデックス操作や、非クラスタ化インデックスを再構築または削除するオフライン インデックス操作では、テーブルのスキーマ修正 (Sch-M) ロックが取得されます。このため、操作中は、基になるテーブルに対するすべてのユーザー アクセスができなくなります。非クラスタ化インデックスを作成するオフライン インデックス操作では、テーブルの共有 (S) ロックが取得されます。この場合は、基になるテーブルに対して更新は許可されませんが、SELECT ステートメントなどの読み取り操作は許可されます。

    詳細については、「オンライン インデックス操作の動作原理」を参照してください。ロックの詳細については、「ロック モード」を参照してください。

    注意

    オンラインでのインデックス操作は、SQL Server Enterprise Edition、Developer Edition、および Evaluation Edition でのみ使用できます。

  • MAXDOP **=**max_degree_of_parallelism
    インデックス操作の間、max degree of parallelism 構成オプションをオーバーライドします。詳細については、「max degree of parallelism オプション」を参照してください。並列プランの実行で使用するプロセッサの数を制限するには、MAXDOP を使用します。最大数は 64 プロセッサです。

    max_degree_of_parallelism には次のデータを指定できます。

    • 1
      並列プラン生成を抑制します。

    • >1
      並列インデックス操作で使用するプロセッサの最大数を、指定された数に制限します。

    • 0 (既定値)
      現在のシステム ワークロードに基づいて、実際の数以下のプロセッサを使用します。

    詳細については、「並列インデックス操作の構成」を参照してください。

    注意

    並列インデックス操作は、SQL Server Enterprise Edition、Developer Edition、および Evaluation Edition でのみ使用できます。

  • DATA_COMPRESSION
    指定したテーブル、パーティション番号、またはパーティション範囲に、データ圧縮オプションを指定します。オプションは次のとおりです。

    • NONE
      テーブルまたは指定したパーティションが圧縮されません。

    • ROW
      行の圧縮を使用して、テーブルまたは指定したパーティションが圧縮されます。

    • PAGE
      ページの圧縮を使用して、テーブルまたは指定したパーティションが圧縮されます。

    圧縮の詳細については、「圧縮されたテーブルおよびインデックスの作成」を参照してください。

  • ON PARTITIONS ( { <partition_number_expression> | <range> } [ ,...n ] )
    DATA_COMPRESSION 設定を適用するパーティションを指定します。テーブルがパーティション分割されていない場合に ON PARTITIONS 引数を使用すると、エラーが発生します。ON PARTITIONS 句を指定しないと、パーティション テーブルのすべてのパーティションに対して DATA_COMPRESSION オプションが適用されます。

    <partition_number_expression> は以下の方法で指定できます。

    • ON PARTITIONS (2) などのように、1 つのパーティションの番号を指定します。

    • ON PARTITIONS (1, 5) などのように、複数のパーティションのパーティション番号をコンマで区切って指定します。

    • ON PARTITIONS (2, 4, 6 TO 8) などのように、範囲と個別のパーティションの両方を指定します。

    <range> は、ON PARTITIONS (6 TO 8) などのように、パーティション番号を TO で区切って指定できます。

    さまざまなパーティションにさまざまな種類のデータ圧縮を設定するには、次のように DATA_COMPRESSION オプションを複数回指定します。

    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)
    )
    
  • <single_partition_rebuild__option>
    ほとんどの場合、インデックスの再構築では、パーティション インデックスのすべてのパーティションを再構築します。次のオプションを 1 つのパーティションに適用した場合は、すべてのパーティションの再構築は行われません。

    • SORT_IN_TEMPDB

    • MAXDOP

    • DATA_COMPRESSION

説明

インデックス オプションの詳細な説明については、「CREATE INDEX (Transact-SQL)」を参照してください。