ALTER INDEX (Transact-SQL)

 

適用対象: ○SQL Server (2008 以降)○Azure SQL Database○Azure SQL Data Warehouse ○Parallel Data Warehouse

インデックスの無効化、再構築、再構成によって、またはインデックスに関するオプションの設定によって、既存のテーブルやビュー インデックス (リレーショナルまたは XML) を変更します。

Topic link icon Transact-SQL 構文表記規則

-- Syntax for SQL Server and Azure 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 ] )   
    }  
[ ; ]  
  
<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 [ (   
            WAIT_AT_LOW_PRIORITY ( MAX_DURATION = <time> [ MINUTES ] ,  
            ABORT_AFTER_WAIT = { NONE | SELF | BLOCKERS } )   
          ) ]   
        | OFF }   
    | 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  
    | 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]}  
}  
  
<low_priority_lock_wait>::=  
{  
    WAIT_AT_LOW_PRIORITY ( MAX_DURATION = <time> [ MINUTES ] ,   
                          ABORT_AFTER_WAIT = { NONE | SELF | BLOCKERS } )  
}  

-- Syntax for Azure 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 }  
}  
  

index_name
インデックスの名前。 インデックス名は、テーブルまたはビュー内では一意である必要がありますが、データベース内で一意である必要はありません。 インデックス名の規則に従う必要があります識別子します。

ALL
インデックスの種類に関係なく、テーブルまたはビューに関連付けられているすべてのインデックスを指定します。 1 つ以上のインデックスがオフラインまたは読み取り専用のファイル グループにあるか、指定した操作が&1; つ以上のインデックスの種類に許可されていない場合、ALL を指定するとステートメントは失敗します。 次の表は、インデックス操作と、許可されないインデックスの種類の一覧です。

ALL を指定する操作テーブル内に存在すると操作が失敗するインデックスの種類
REBUILD WITH ONLINE = ONXML インデックス

空間インデックス

列ストア インデックス:に適用されます。 SQL Server 2012を通じてSQL Server 2016とAzure SQL データベースです。
REBUILD PARTITION = partition_number非パーティション インデックス、XML インデックス、空間インデックス、または無効化されたインデックス
REORGANIZEALLOW_PAGE_LOCKS が OFF に設定されたインデックス
パーティションの再編成 = partition_number非パーティション インデックス、XML インデックス、空間インデックス、または無効化されたインデックス
IGNORE_DUP_KEY = ONXML インデックス

空間インデックス

列ストア インデックス:に適用されます。 SQL Server 2012を通じてSQL Server 2016とAzure SQL データベースです。
ONLINE = ONXML インデックス

空間インデックス

列ストア インデックス:に適用されます。 SQL Server 2012を通じてSQL Server 2016とAzure SQL データベースです。
System_CAPS_ICON_warning.jpg 警告

詳細なオンラインで実行できるインデックス操作についてを参照してください。オンライン インデックス操作するためのガイドラインします。

パーティションで ALL を指定した場合、= partition_number、すべてのインデックスを固定する必要があります。 つまり、すべてのインデックスは、等価パーティション関数に基づいてパーティション分割されます。 パーティションを持つすべてを使用すると、同じすべてのインデックス パーティションとpartition_numberを再構築または再構成します。 パーティション インデックスの詳細については、「 Partitioned Tables and Indexes」を参照してください。

データベース名
データベースの名前です。

schema_name
テーブルまたはビューが属するスキーマの名前を指定します。

table_or_view_name
インデックスに関連付けられているテーブルまたはビューの名前を指定します。 オブジェクトのインデックスのレポートを表示する、 sys.indexesカタログを表示します。

Windows Azure SQL データベースでは、database_name が現在のデータベースの場合、または database_name が tempdb で、table_or_view_name が # で始まる場合に、3 つの要素で構成された名前形式 database_name.[schema_name].table_or_view_name をサポートします。

REBUILD [ WITH (<rebuild_index_option> [ ,...n]) ]</rebuild_index_option>
同じ列、インデックスの種類、一意性属性、および並べ替え順に従って、インデックスを再構築します。 この句はDBCC DBREINDEXします。 REBUILD では、無効化されたインデックスが有効になります。 クラスター化インデックスを再構築しても、キーワード ALL を指定しない限り、関連付けられている非クラスター化インデックスは再構築されません。 既存のインデックス オプションに格納されている値をインデックス オプションが指定されていない場合sys.indexes適用されます。 値が格納されていないインデックス オプションについてsys.indexesオプションの引数の定義に示されている既定値が適用されます。

ALL を指定した場合で、基になるテーブルがヒープの場合、テーブルは再構築操作の影響を受けません。 テーブルに関連付けられている非クラスター化インデックスは再構築されます。

データベース復旧モデルが一括ログ復旧モデルまたは単純復旧モデルのいずれかに設定されている場合、再構築操作のログへの記録は最小限にできます。

System_CAPS_ICON_note.jpg メモ

プライマリ XML インデックスを再構築するとき、基になるユーザー テーブルはインデックス操作の間使用できなくなります。

適用対象:SQL Server 2012を通じてSQL Server 2016とAzure SQL データベースです。

列ストア インデックスの場合、再構築操作。

  1. 並べ替え順序を使用しません。

  2. 再構築が行われている間、テーブルまたはパーティションを排他的にロックします。 データは、NOLOCK、RCSI または SI を使用する場合でも、「オフライン」であり、再構築中に使用できません。

  3. すべてのデータを列ストアに再圧縮します。 再構築が行われている間、列ストア インデックスのコピーが&2; つ存在します。 再構築が完了したら、 SQL Server により、元の列ストア インデックスが削除されます。

列ストア インデックスの再構築の詳細については、次を参照してください列ストア インデックスの最適化。

PARTITION

適用対象:SQL Server 2008:を通じてSQL Server 2016とAzure SQL データベースです。

インデックスの&1; つのパーティションのみを再構築または再構成します。 パーティションを指定できませんindex_nameパーティション分割されたインデックスではありません。

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

System_CAPS_ICON_warning.jpg 警告

固定されていないインデックスをパーティションが 1, 000 個以上あるテーブルに作成または再構築することは可能ですが、サポートされていません。 このような操作を行うと、操作中にパフォーマンスが低下したりメモリが過度に消費される可能性があります。 パーティションの数が 1, 000 個を超えた場合は、固定されたインデックスのみを使用することをお勧めします。

partition_number

適用対象:SQL Server 2008:を通じてSQL Server 2016とAzure SQL データベースです。

再構築または再構成するパーティション インデックスのパーティション番号を指定します。 partition_number変数が参照できる定数式です。 ユーザー定義型変数または関数、およびユーザー定義関数では、これらは参照できませんが、Transact-SQLステートメントです。 partition_number存在する必要がありますか、ステートメントは失敗します。

WITH (<single_partition_rebuild_index_option>)</single_partition_rebuild_index_option>

適用対象:SQL Server 2008:を通じてSQL Server 2016とAzure SQL データベースです。

SORT_IN_TEMPDB、MAXDOP、および DATA_COMPRESSION は&1; つのパーティションを再構築するときに指定できるオプション (パーティション = n)。 XML インデックスは、単一のパーティションの再構築操作では指定できません。

DISABLE
インデックスを無効とマークし、データベース エンジンで使用されないようにします。 どのインデックスも無効にできます。 無効になったインデックスのインデックス定義は、基になるインデックス データがなくてもシステム カタログに残ります。 クラスター化インデックスを無効にすると、基になるテーブル データをユーザーのアクセスができなくなります。 インデックスを有効にするには、ALTER INDEX REBUILD または CREATE INDEX WITH DROP_EXISTING を使用します。 詳細については、次を参照してください。を無効にするインデックスと制約を有効にするインデックスと制約します。

行ストア インデックスを再編成します。
行ストア インデックスの再構成は、インデックスのリーフ レベルを再編成するを指定します。 再構成操作に示します。

  • オンライン必ず実行されます。 つまり、ALTER INDEX REORGANIZE トランザクション中は、長期にわたって他をブロックするテーブル ロックは保持されず、基になるテーブルへのクエリまたは更新を続行できます。

  • 無効化されたインデックスは許可されていません

  • ALLOW_PAGE_LOCKS が OFF に設定した場合に許可されていません

  • トランザクション内で実行され、トランザクションがロールバック場合、ロールバックされません。

REORGANIZE で( LOB_COMPACTION = { ON |OFF } )
行ストア インデックスに適用されます。

LOB_COMPACTION = ON

  • これらのラージ オブジェクト (LOB) データ型のデータを含むすべてのページを圧縮することを指定します。 イメージ、text、ntext、varchar (max)、nvarchar (max)、varbinary (max)、および xml です。 このデータを圧縮すると、ディスク上にデータ サイズが小さくことができます。

  • クラスター化インデックス、テーブルに格納されているすべての LOB 列が圧縮されます。

  • 非クラスター化インデックス、インデックスに非キー (付加) 列であるすべての LOB 列が圧縮されます。

  • すべて再構成は、すべてのインデックスに対して LOB_COMPACTION を実行します。 各インデックスには、クラスター化インデックス、基になるテーブルまたは非クラスター化インデックスの付加列内のすべての LOB 列が圧縮されます.

LOB_COMPACTION = オフ

  • ラージ オブジェクト データを含むページは圧縮されません。

  • OFF の指定は、ヒープには影響しません。

列ストア インデックスを再編成します。
REORGANIZE はオンラインで実行します。

列ストア インデックスの場合は、REORGANIZE がそれぞれの閉じたデルタ行グループ、列ストアに圧縮行グループとして圧縮されます。

  • 閉じたデルタ行グループを圧縮行グループに移動するためには、REORGANIZE は必要はありません。 バック グラウンド (TM) の組ムーバー プロセスは、閉じたデルタ行グループを圧縮する定期的に起動されます。 組ムーバーが遅延している場合は、REORGANIZE を使用することをお勧めします。 REORGANIZE では、行グループをより積極的に圧縮できます。

  • すべてのオープンと CLOSED 行グループを圧縮するには、このセクションの再編成と (COMPRESS_ALL_ROW_GROUPS) オプションを表示できます。

(2016年以降) SQL Server と Azure SQL データベースで列ストア インデックスの場合は、REORGANIZE は、次の追加の最適化最適化オンラインを実行します。

  • 物理的に行の 10% 以上が論理的に削除されたときに、行グループから行を削除します。 削除されたバイトは、物理メディアで再利用されます。 たとえば、100万行の圧縮された行グループは、100 個の行が削除されたがある、SQL Server は、削除された行を削除し、900 個の行と行グループを再圧縮します。 削除された行を削除することで、記憶域に保存されます。

  • 1,024,576 行の最大値までの行グループごとの行数を増やすには 1 つまたは複数の圧縮行グループを結合します。 たとえば、一括インポートした 102,400 行の 5 つのバッチ 5 圧縮行グループが表示されます。 REORGANIZE を実行する場合、これらの行グループは 512,000 行のサイズの圧縮行グループを 1 に結合されません。 これにより、なかったディクショナリのサイズやメモリの制限を前提としています。

  • 10% 以上の行数が論理的に削除された行グループ、SQL Server はこの行グループを 1 つまたは複数の行グループと結合する試します。 たとえば、500,000 行で 1 行グループが圧縮されてし、21 行グループは 1,048, 576 行の最大値で圧縮されました。 行グループ 21 409,830 行の領域が削除された行の 60% があります。 SQL Server では、これら 2 つの行グループ 909,830 行を持つ新しい行グループを圧縮するを組み合わせることを優先します。

使用して再構成. (COMPRESS_ALL_ROW_GROUPS = {ON |OFF } )
SQL Server (2016年以降) および Azure SQL データベースで、列ストアを開くまたは CLOSED のデルタ行グループを強制的に、COMPRESS_ALL_ROW_GROUPS を使用できます。 このオプションを使用して、デルタ行グループを空にする列ストア インデックスを再構築する必要はありません。 これと組み合わせて、その他の削除とマージの最適化機能がほとんどの状況でインデックスを再構築する必要なくなったことです。

  • サイズと終了 (開く) の状態に関係なく、列ストアにすべての行グループを強制します。

  • オフには、列ストアにすべての閉じた行グループを強制します。

SET ( <set_index option=""> [ ,...n] )</set_index>
インデックスを再構築または再構成しないでインデックス オプションを指定します。 無効化されたインデックスには、SET は指定できません。

PAD_INDEX = { ON | OFF }

適用対象:SQL Server 2008:を通じてSQL Server 2016とAzure SQL データベースです。

インデックスの埋め込みを指定します。 既定値は OFF です。

ON
FILLFACTOR で指定される空き領域のパーセンテージが、インデックスの中間レベルのページに適用されます。 Fill factor に格納された値で同時 PAD_INDEX を ON に設定するのには、FILLFACTOR が指定されていない場合、 sys.indexesを使用します。

無効またはfillfactorが指定されていません。
中間レベルのページは、ほぼ全容量が使用されます。 この場合、中間ページのキーのセットに基づき、インデックスに割り当てることのできる&1; 行以上の最大サイズが収まる分の領域は残されます。

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

FILLFACTOR = fillfactor

適用対象:SQL Server 2008:を通じてSQL Server 2016とAzure SQL データベースです。

どの程度を示すパーセント値で指定、データベース エンジンインデックスの作成または変更時に各インデックス ページのリーフ レベルにする必要があります。 fillfactor 1 から 100 までの整数値にする必要があります。 既定値は 0 です。 Fill factor 値 0 と 100 は、まったく同じです。

明示的な FILLFACTOR 設定値は、インデックスの初回作成時または再構築時のみ適用されます。 データベース エンジンはない動的に保持ページ内の空き領域の比率を指定します。 詳細については、「CREATE INDEX (Transact-SQL)」を参照してください。

表示するには、fill factor 設定を使用してsys.indexesします。

System_CAPS_ICON_important.jpg 重要

データベース エンジンではクラスター化インデックスの作成時にデータが再分配されるため、FILLFACTOR 値を使用してクラスター化インデックスを作成または変更すると、データ用のストレージ領域のサイズに影響が生じます。

SORT_IN_TEMPDB = {ON |OFF }

適用対象:SQL Server 2008:を通じてSQL Server 2016とAzure SQL データベースです。

並べ替えの結果を格納するかどうかを示すtempdbします。 既定値は OFF です。

ON
インデックスの構築に使用される並べ替えの中間結果が格納されているtempdbします。 場合tempdbは異なる一連のユーザー データベースのディスクでは、インデックスを作成するために必要な時間が削減されます。 インデックスの構築中に使用されるディスク領域のサイズは増加します。

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

並べ替え操作が必要でない場合、または並べ替えをメモリ内で実行できない場合は、SORT_IN_TEMPDB オプションは無視されます。

詳細については、次を参照してください。 SORT_IN_TEMPDB オプションのインデックスします。

IGNORE_DUP_KEY ** = ** {ON |OFF}
挿入操作で、一意のインデックスに重複するキー値を挿入しようとした場合のエラー応答を指定します。 IGNORE_DUP_KEY オプションは、インデックスが作成または再構築された後の挿入操作のみに適用されます。 既定値は 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
自動統計更新が有効です。

自動統計更新を復元するには、STATISTICS_NORECOMPUTE を OFF に設定するか、NORECOMPUTE 句を指定せずに UPDATE STATISTICS を実行します。

System_CAPS_ICON_important.jpg 重要

分布統計の自動再計算を無効にすると、クエリ オプティマイザーで、テーブルに関連するクエリの最適実行プランが選択されなくなる場合があります。

STATISTICS_INCREMENTAL = {ON |OFF }
ON、作成される統計は、パーティションごとの統計です。 OFF、統計ツリーが削除されるとSQL Server統計が再計算します。 既定値はOFFします。

パーティションごとの統計がサポートされていない場合、このオプションは無視され、警告が生成されます。 次の種類の統計では、増分統計がサポートされていません。

  • ベース テーブルにパーティションで固定されていないインデックスを使用して作成された統計。

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

  • 読み取り専用のデータベースに対して作成された統計。

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

  • ビューに対して作成された統計。

  • 内部テーブルに対して作成された統計。

  • 空間インデックスまたは XML インデックスを使用して作成された統計。

適用対象:SQL Server 2014を通じてSQL Server 2016とAzure SQL データベースです。

ONLINE = { ON |OFF }>
インデックス操作時に、基になるテーブルや関連するインデックスをクエリやデータ変更で使用できるかどうかを指定します。 既定値は OFF です。

XML インデックスまたは空間インデックスの場合、ONLINE = OFF だけがサポートされます。ONLINE を ON に設定すると、エラーが発生します。

System_CAPS_ICON_note.jpg メモ

オンラインでのインデックス操作は、Microsoft SQL Server のすべてのエディションで使用できるわけではありません。 各エディションでサポートされている機能の一覧についてはSQL Serverを参照してくださいエディションとサポートされている機能の SQL Server 2016します。

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

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

詳細については、次を参照してください。オンライン インデックス操作のしくみします。

インデックスは、グローバル一時テーブル上のインデックスを含めてオンラインで再構築できます。ただし、次のインデックスは例外です。

  • XML インデックス数

  • ローカル一時テーブル上のインデックス

  • パーティション インデックスのサブセット (パーティション インデックス全体の再構築はオンラインで実行できます)

  • V12 では、以前の SQL Database と SQL Server 2012 より前の SQL Server が許可されていない、ONLINEクラスター化インデックスの構築オプションまたはベース テーブルが含まれている場合は、操作を再構築varchar (max)またはvarbinary (max)列です。

ALLOW_ROW_LOCKS = { ON |OFF}

適用対象:SQL Server 2008:を通じてSQL Server 2016とAzure SQL データベースです。

行ロックを許可するかどうかを指定します。 既定値は ON です。

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

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

ALLOW_PAGE_LOCKS = { ON |OFF}

適用対象:SQL Server 2008:を通じてSQL Server 2016とAzure SQL データベースです。

ページ ロックを許可するかどうかを指定します。 既定値は ON です。

ON
インデックスにアクセスするとき、ページ ロックが許可されます。 データベース エンジンページ ロックが使用されるを決定します。

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

System_CAPS_ICON_note.jpg メモ

ALLOW_PAGE_LOCKS を OFF に設定した場合、インデックスを再構成することはできません。

MAXDOP ** = ** max_degree_of_parallelism

適用対象:SQL Server 2008:を通じてSQL Server 2016とAzure SQL データベースです。

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

System_CAPS_ICON_important.jpg 重要

MAXDOP オプションはすべての XML インデックスで構文的にサポートされていますが、空間インデックスまたはプライマリ XML インデックスの場合、現在の ALTER INDEX では単一のプロセッサのみが使用されます。

max_degree_of_parallelismを指定できます。

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

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

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

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

System_CAPS_ICON_note.jpg メモ

並列インデックス操作では使用できないすべてのエディションのMicrosoftSQL Serverします。 各エディションでサポートされている機能の一覧についてはSQL Serverを参照してくださいエディションとサポートされている機能の SQL Server 2016します。

COMPRESSION_DELAY = { 0 |duration [Minutes] }
この機能は SQL Server 2016 の CTP 3.3 の後に使用されます。

ディスク ベース テーブルでは、SQL Server が圧縮された行グループに圧縮前に、遅延はデルタ行グループの終了状態にデルタ行グループがおく必要がある分単位の最小数を指定します。 ディスク ベース テーブルの挿入を管理および更新しないので時間個々 の行では、SQL Server に適用される遅延終了状態にデルタ行グループ。
既定値は、0 分です。

既定値は、0 分です。

COMPRESSION_DELAY を使用して、リアルタイムの経営分析を列ストア インデックスを参照してくださいする場合の推奨事項についてです。

DATA_COMPRESSION
指定したインデックス、パーティション番号、またはパーティション範囲に、データ圧縮オプションを指定します。 次のオプションがあります。

NONE
インデックスまたは指定したパーティションが圧縮されません。 これは、列ストア インデックスには適用されません。

ROW
行の圧縮を使用して、インデックスまたは指定したパーティションが圧縮されます。 これは、列ストア インデックスには適用されません。

PAGE
ページの圧縮を使用して、インデックスまたは指定したパーティションが圧縮されます。 これは、列ストア インデックスには適用されません。

COLUMNSTORE

適用対象:SQL Server 2014を通じてSQL Server 2016とAzure SQL データベースです。

非クラスター化列ストア インデックスとクラスター化列ストア インデックスの両方を含む列ストア インデックスにのみ適用されます。 COLUMNSTORE は、COLUMNSTORE_ARCHIVE オプションで圧縮されたインデックスまたは指定のパーティションを解凍するように指定します。 復元されるデータは、すべての列ストア インデックスに使用された列ストア圧縮を使用して引き続き圧縮されます。

COLUMNSTORE_ARCHIVE

適用対象:SQL Server 2014を通じてSQL Server 2016とAzure SQL データベースです。

非クラスター化列ストア インデックスとクラスター化列ストア インデックスの両方を含む列ストア インデックスにのみ適用されます。 COLUMNSTORE_ARCHIVE は、指定したパーティションをより小さなサイズにさらに圧縮します。 これは、保存用や、ストレージのサイズを減らす必要があり、しかも保存と取得に時間をかける余裕があるその他の状況で使用できます。

圧縮の詳細については、次を参照してください。データ圧縮します。

パーティションで( { <partition_number_expression>|<>> } [,...n] )</partition_number_expression>

適用対象:SQL Server 2008:を通じてSQL Server 2016とAzure SQL データベースです。

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)。

<>>たとえば、to で区切ってパーティション番号として指定できます: ON PARTITIONS (6 TO 8)。

さまざまなパーティションにさまざまな種類のデータ圧縮を設定するには、次のように 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)  
);  

ONLINE = { ON |OFF }>
インデックスまたは基になるテーブルのインデックス パーティションをオンラインまたはオフラインで再構築できるかどうかを指定します。 場合を再構築はオンラインで実行 (ON) このテーブルのデータは、インデックス操作中にクエリやデータの変更で使用できます。 既定値はOFFします。

ON
長期のテーブル ロックは、インデックス操作の間は保持されません。 インデックス操作の主要フェーズの期間、ソース テーブルではインテント共有 (IS) ロックのみが保持されます。 インデックスの再構築を開始するときにテーブルに対する S ロックが必要であり、オンライン インデックス再構築を終了するときにテーブルに対する Sch-M ロックが必要です。 どちらのロックも短いメタデータ ロックですが、特に Sch-M ロックは、すべてのブロックしているトランザクションの完了を待機する必要があります。 待機中、Sch-M ロックは、同じテーブルにアクセスするためにこのロックの後に待機している他のすべてのトランザクションをブロックします。

System_CAPS_ICON_note.jpg メモ

オンライン インデックス再構築を設定できる、 low_priority_lock_waitオプションのこのセクションで後述します。

OFF
テーブル ロックは、インデックス操作の間適用されます。 このため、操作中は、すべてのユーザーは基になるテーブルにアクセスできません。

WAIT_AT_LOW_PRIORITY

適用対象:SQL Server 2014を通じてSQL Server 2016とAzure SQL データベースです。

オンライン インデックス再構築では、このテーブルに対する操作がブロックされるまで待機する必要があります。 WAIT_AT_LOW_PRIORITYの優先度の低いロックをオンライン インデックス構築操作が待機している間に続行するには、その他の操作を許可する、オンライン インデックス再構築操作が待機することを示します。 省略すると、 WAIT AT LOW PRIORITYオプションに相当WAIT_AT_LOW_PRIORITY (MAX_DURATION = 0 minutes, ABORT_AFTER_WAIT = NONE)します。

MAX_DURATION =時間[]

適用対象:SQL Server 2014を通じてSQL Server 2016とAzure SQL データベースです。

オンライン インデックス再構築のロックが、DDL コマンドの実行時に低い優先度で待機する時間 (分単位で指定した整数値) です。 操作がブロックされている場合、 MAX_DURATIONのいずれかの時間、 ABORT_AFTER_WAIT動作が実行されます。 MAX_DURATION分、および単語が期間は常にを省略できます。

ABORT_AFTER_WAIT = [NONE | SELF | BLOCKERS } ]

適用対象:SQL Server 2014を通じてSQL Server 2016とAzure SQL データベースです。

NONE
通常の (標準) 優先度のロックを待機し続けます。

SELF
いずれのアクションも行わずに、現在実行中のオンライン インデックス再構築の DDL 操作を終了します。

BLOCKERS
オンライン インデックス再構築の DDL 操作をブロックしているすべてのユーザー トランザクションを強制終了して、操作を続行できるようにします。 ブロッカー選択されているとは、ログインにALTER ANY CONNECTION権限です。

インデックスをパーティションに再分割するか別のファイル グループに移動する場合、ALTER INDEX は使用できません。 このステートメントは、列の追加や削除、または列の順序変更など、インデックス定義の変更には使用できません。 これらの操作を実行するには、CREATE INDEX を DROP_EXISTING 句と共に使用します。

オプションを明示的に指定しない場合は、現在の設定が適用されます。 たとえば、REBUILD 句で FILLFACTOR 設定を指定しなかった場合、再構築処理では、システム カタログに格納されている FILL FACTOR 値が使用されます。 現在のインデックス オプションの設定を表示するには使用sys.indexesします。

System_CAPS_ICON_note.jpg メモ

ONLINE、MAXDOP、および SORT_IN_TEMPDB の値は、システム カタログに格納されません。 インデックス ステートメントでオプション値を指定しない限り、各オプションの既定値が使用されます。

マルチプロセッサ コンピューター上では、ALTER INDEX REBUILD は他のクエリと同様、自動的に使用プロセッサの数を増やしてインデックスの変更に関連するスキャンや並べ替え操作を実行します。 実行すると、ALTER INDEX REORGANIZE LOB_COMPACTION の有無、並列処理の次数を最大値は&1; つのスレッド操作します。 詳細については、「 並列インデックス操作の構成」を参照してください。

インデックスのあるファイル グループがオフラインまたは読み取り専用に設定されていると、インデックスを再構成または再構築することはできません。 キーワード ALL を指定した場合で、1 つ以上のインデックスがオフラインまたは読み取り専用のファイル グループにある場合、ステートメントは失敗します。

インデックスの再構築では、インデックスを削除し再作成します。 この操作では、断片化をなくし、指定されているか既に存在する FILL FACTOR 設定に基づいてページを圧縮することによりディスク領域を取り戻した後、連続するページにインデックス行を再び並べ替えます。 ALL を指定した場合、テーブル上のすべてのインデックスが、1 回のトランザクションで削除され再構築されます。 FOREIGN KEY 制約は、前もって削除しておく必要はありません。 128 以上のエクステントがあるインデックスを再構築すると、データベース エンジンでは、トランザクションがコミットされるまで実際のページの割り当て解除とそれに関連するロックが延期されます。

小さなインデックスを再構築または再構成しても、多くの場合、断片化が解消することはありません。 小さなインデックスのページは、混合エクステントに格納される場合もあります。 混合エクステントは最大&8; つのオブジェクトで共有されるため、小さなインデックスを再構成または再構築しても、その断片化は解消されない場合があります。

SQL Server 2012 以降では、パーティション インデックスが作成または再構築された場合、テーブル内のすべての行をスキャンして統計を作成することはできません。 代わりに、クエリ オプティマイザーが既定のサンプリング アルゴリズムを使用して統計を生成します。 テーブル内のすべての行をスキャンしてパーティション インデックスの統計を作成するには、FULLSCAN 句で CREATE STATISTICS または UPDATE STATISTICS を使用します。

以前のバージョンの SQL Server では、非クラスター化インデックスを再構築することで、ハードウェア障害により発生した不一致を修正できる場合がありました。 SQL Server 2008:し、後で、まだあります非クラスター化インデックスをオフラインで再構築して、インデックスとクラスター化インデックス間の不一致を修復できません。 オンラインでインデックスを再構築する場合、既存の非クラスター化インデックスを基に再構築が行われるので、不一致を維持してしまい非クラスター化インデックスの不一致を修復できません。 オフラインでインデックスを再構築すると、強制的にクラスター化インデックス (ヒープ) のスキャンがなされ、不一致が解消されることがあります。 クラスター化インデックスからの再構築を保証するため、非クラスター化インデックスを削除および再作成します。 不一致を解消する場合、以前のバージョンと同様に影響を受けたデータをバックアップから復元することをお勧めします。ただし、非クラスター化インデックスをオフラインで再構築しても、インデックスの不一致を修復できます。 詳細については、「DBCC CHECKDB (Transact-SQL)」を参照してください。

クラスター化列ストア インデックスを再構築する際、SQL Server は以下のように動作します。

  1. 再構築が行われている間、テーブルまたはパーティションを排他的にロックします。 再構築の間、データは "オフライン" になって使用できません。

  2. テーブルから論理的に削除された行を物理的に削除することで、列ストアをデフラグします。削除されたバイトは物理メディアで再利用されます。

  3. 元の列ストア インデックスから、デルタストアを含むすべてのデータを読み取ります。 データを新しい行グループに結合し、行グループを列ストアに圧縮します。

  4. 再構築中に、物理メディア上の領域を要求して列ストア インデックスのコピーを&2; つ格納します。 再構築が完了すると、SQL Server は元のクラスター化列ストア インデックスを削除します。

インデックスの再構成では、最小のシステム リソースが使用されます。 この操作では、リーフ レベル ページをリーフ ノードの論理順序 (左から右) に合わせて物理的に並べ替えることにより、テーブルやビュー上にあるクラスター化および非クラスター化インデックスのリーフ レベルをデフラグします。 再構成でも、インデックス ページは圧縮されます。 圧縮は既存の FILL FACTOR 値に基づいて行われます。 表示するには、fill factor 設定を使用してsys.indexesします。

ALL を指定した場合、テーブル上のクラスター化および非クラスター化両方のリレーショナル インデックスと XML インデックスが再構成されます。 ALL を指定した場合は、いくつかの制限が適用されます。「引数」の ALL の定義を参照してください。

詳細については、「 インデックスの再編成と再構築」を参照してください。

インデックスを無効化すると、ユーザーはインデックスにアクセスできなくなり、クラスター化インデックスの場合は基になるテーブル データにもアクセスできなくなります。 インデックス定義はシステム カタログに残ります。 ビュー上で非クラスター化インデックスまたはクラスター化インデックスを物理的に無効にすると、インデックス データが削除されます。 クラスター化インデックスを無効にすると、データにアクセスできなくなりますが、データはインデックスが削除または再構築されるまで B ツリーに残ります。このデータは管理されません。 有効または無効なインデックスの状態を表示するクエリ、 is_disabled内の列、 sys.indexesカタログを表示します。

テーブルがトランザクション レプリケーション パブリケーション内にある場合、主キー列に関連付けられているインデックスを無効にすることはできません。 これらのインデックスはレプリケーションで必要です。 インデックスを無効にするには、まずパブリケーションからテーブルを削除する必要があります。 詳細については、次を参照してください。発行データおよびデータベース オブジェクトします。

インデックスを有効にするには、ALTER INDEX REBUILD ステートメントまたは CREATE INDEX WITH DROP_EXISTING ステートメントを使用します。 ONLINE オプションが ON に設定されていると、無効化されたクラスター化インデックスを再構築できません。 詳細については、「 インデックスと制約の無効化」を参照してください。

特定のインデックスに対して、再構築または再構成を行わずに ALLOW_ROW_LOCKS、ALLOW_PAGE_LOCKS、IGNORE_DUP_KEY および STATISTICS_NORECOMPUTE オプションを設定できます。 変更された値はすぐにインデックスに適用されます。 これらの設定を表示するには使用sys.indexesします。 詳細については、「インデックス オプションの設定」を参照してください。

行およびページ ロック オプション

ALLOW_ROW_LOCKS = ON かつ ALLOW_PAGE_LOCK = ON の場合は、インデックスにアクセスするとき、行レベル、ページ レベル、およびテーブル レベルのロックが許可されます。 データベース エンジン適切なロックを選択し、行またはページ ロックのロックをテーブル ロックのロックをエスカレートすることができます。

ALLOW_ROW_LOCKS = OFF かつ ALLOW_PAGE_LOCK = OFF の場合は、インデックスにアクセスするときにテーブル レベルのロックだけが許可されます。

行またはページ ロック オプションが設定されている場合に ALL を指定すると、この設定はすべてのインデックスに適用されます。 基になるテーブルがヒープの場合、この設定は次のように適用されます。

ALLOW_ROW_LOCKS = ON または OFFヒープおよび関連する非クラスター化インデックスに適用。
ALLOW_PAGE_LOCKS = ONヒープおよび関連する非クラスター化インデックスに適用。
ALLOW_PAGE_LOCKS = OFF非クラスター化インデックスに完全に適用。 この場合、非クラスター化インデックスではすべてのページ ロックが許可されません。 ヒープでは、ページに対して共有 (S)、更新 (U) および排他 (X) ロックだけが許可されなくなります。 データベース エンジン内部目的用にインテント ページ ロック (IS、IU または IX) を引き続き取得できます。

インデックスを再構築する場合で ONLINE オプションが ON に設定されている場合、クエリおよびデータ変更で、基になるオブジェクト、テーブルおよび関連インデックスを使用できます。 1 つのパーティションに存在するインデックスの一部をオンラインで再構築することもできます。 排他テーブル ロックは、変更処理中の非常に短い時間だけ保持されます。

インデックスの再構成は、常にオンラインで実行されます。 この処理ではロックが長期間保持されないので、実行中のクエリや更新はブロックされません。

同じテーブルまたはテーブル パーティションでのオンライン インデックス操作は、次の場合のみ同時に実行できます。

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

  • 同じテーブルで異なるインデックスを再構成する。

  • 同じテーブルで重複しないインデックスを再構築する間、別のインデックスを再構成する。

その他すべてのオンライン インデックス操作は、同時に実行しようとしても失敗します。 たとえば、同じテーブル上で同時に複数のインデックスを再構築したり、同じテーブルで既存のインデックスを再構築する間に新しいインデックスを作成することはできません。

詳しくは、「 Perform Index Operations Online」をご覧ください。

WAIT_AT_LOW_PRIORITY

オンライン インデックス再構築の DDL ステートメントを実行するには、特定のテーブルで実行されているすべてのアクティブなブロック トランザクションが完了する必要があります。 オンライン インデックス再構築を実行すると、このテーブルに対する実行の開始が準備できているすべての新しいトランザクションがブロックされます。 オンライン インデックス再構築のロックの期間は非常に短いですが、特定のテーブルに対して開かれているすべてのトランザクションの完了を待機し、新しいトランザクションの開始をブロックすることで、スループットに大きな影響を与える場合があり、ワークロードの速度低下またはタイムアウトを引き起こしたり、基になるテーブルへのアクセスが大幅に制限されたりします。 WAIT_AT_LOW_PRIORITYオプションにより、DBA がオンラインのインデックスを再構築し、3 つのオプションのいずれかを選択することができますに必要な S ロックおよび SCH-M ロックを管理します。 すべて 3 の場合、待機時間の実行中に、( (MAX_DURATION = n [minutes]) ) ブロッキング アクティビティが存在しない、オンライン インデックス再構築が待機なしですぐに実行し、DDL ステートメントが完了します。

空間インデックスを再構築するとき、基になるユーザー テーブルはインデックス操作の間使用できなくなります。これは、空間インデックスがスキーマ ロックを保持するためです。

ユーザー テーブルの PRIMARY KEY 制約は、そのテーブルの列に空間インデックスが定義されているときは変更できません。 PRIMARY KEY 制約を変更する場合は、初めにテーブルのすべての空間インデックスを削除してください。 PRIMARY KEY 制約を変更した後、各空間インデックスを再作成できます。

単一のパーティションの再構築操作では、空間インデックスを指定できません。 ただし、パーティションの完全な再構築では、空間インデックスを指定できます。

BOUNDING_BOX や GRID など、空間インデックス固有のオプションを変更するには、DROP_EXISTING = ON を指定する CREATE SPATIAL INDEX ステートメントを使用するか、空間インデックスを削除して新しく作成します。 例については、「 CREATE SPATIAL INDEX (Transact-SQL)」の「解説」をご覧ください。

データ圧縮の詳細については、「 データの圧縮」を参照してください。

影響を評価するページおよび行の圧縮を変更するは、テーブル、インデックス、またはパーティションを使用して、 sp_estimate_data_compression_savingsストアド プロシージャです。

パーティション インデックスには次の制限が適用されます。

  • ALTER INDEX ALL ..., を使用しても、固定されていないインデックスがテーブルにあると、そのパーティションの圧縮の設定を変更できません。

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

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

実行するとALTER INDEX ALL. テーブルにのみ、統計情報に関連付けられたインデックスが更新されます。 (インデックスではなく) テーブルで作成されている自動または手動の統計は更新されません。

ALTER INDEX を実行するには、少なくとも、テーブルまたはビューの ALTER 権限が必要です。

  • Azure SQL Database では、ファイル グループと filestream オプションは使用しません。

  • 列ストア インデックスは、SQL Server 2012 より前のご利用いただけません。

これらの例は、列ストア インデックスに適用されます。

デモを再編成します。

この例では、ALTER INDEX REORGANIZE コマンドの動作を示します。 複数の行グループを持ち、その後、再編成が、行グループを結合する方法を示しますテーブルを作成します。

-- 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;  
CREATE CLUSTERED COLUMNSTORE INDEX idxcci_cci_target ON cci_target;  

TABLOCK オプションを使用すると、並列で行を挿入できます。 SQL Server 2016 から始めて、INSERT INTO 操作が並列で実行 TABLOCK を使用するとします。

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

開いているデルタ行グループを表示するには、このコマンドを実行します。 行グループの数は、並列処理の程度によって異なります。

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

すべての終了と開いている行グループを強制的に列ストアにこのコマンドを実行します。

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

このコマンドを再実行し、小規模な行グループが圧縮された行グループの&1; つにマージされることが表示されます。

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

A. 列ストアに CLOSED デルタ行グループを圧縮します。

この例を使用して、REORGANIZE オプションを圧縮閉じたデルタ行グループはそれぞれ、列ストアに圧縮行グループとします。 これは必須ではありませんが、組ムーバーが十分に高速の閉じた行グループを圧縮しない場合に便利です。

-- 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;  

B. 列ストアにすべてデルタ行グループのオープンとクローズドの圧縮します。

適用されません SQL Server 2012 および 2014。

SQL Server 2016 以降では、次のように再編成で実行できます (COMPRESS_ALL_ROW_GROUPS = ON) 圧縮行グループと列ストアにそれぞれのオープンとクローズ デルタ行グループを圧縮します。 これは、デルタストアが空にされ、強制的にすべての行を列ストアに圧縮されます。 これは、これらの操作が&1; つまたは複数のデルタストアの行を格納するために、多くの挿入操作を実行した後に特に役立ちます。

REORGANIZE 行の最大数までの行グループを入力する行グループを結合します。<= 1,024,576.></= 1,024,576.> そのため、すべてのオープンと CLOSED 行グループを圧縮すると、されません最終的には多くのみに、いくつかの行を持つ圧縮行グループのです。 圧縮サイズを縮小し、クエリ パフォーマンスを向上できるだけゆとりする行グループが必要です。

-- Uses AdventureWorksDW2016CTP3  
-- 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);  

C. 列ストア インデックスをオンラインの最適化します。

適用されません。 SQL Server 2012 および 2014 です。

SQL Server 2016 から始めて、REORGANIZE は複数の圧縮デルタ行グループ、列ストアにします。 また、オンラインでの最適化を実行します。 最初に、行グループ内の行の 10% 以上が削除されたときに物理的に削除された行を削除することで、列ストアのサイズを縮小します。 次を 1,024,576 行の行グループあたりの最大値持つ大規模な行グループを形成する行グループを結合します。 すべての行グループを変更しても再圧縮します。

System_CAPS_ICON_note.jpg メモ

SQL Server 2016 から始めて、列ストア インデックスを再構築は不要になったほとんどの状況で必要な REORGANIZE は物理的に削除された行を削除し、行グループをマージするためです。 COMPRESS_ALL_ROW_GROUPS オプションでは、以前、再構築でのみ実行できましたが、列ストアにすべてのオープンまたは CLOSED デルタ行グループを強制します。 オンラインの再構成と、操作が発生する場合、クエリを継続できるように、バック グラウンドで発生します。

-- 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;  

D. オフラインでクラスター化列ストア インデックスを再構築します。

適用対象: SQL Server 2012、SQL Server 2014

以降では、SQL Server 2016 とAzure SQL データベース、ALTER INDEX REBUILD の代わりに ALTER INDEX REORGANIZE を使用することをお勧めします。

System_CAPS_ICON_note.jpg メモ

SQL Server 2012 および 2014 では、REORGANIZE はのみ、CLOSED 行グループに列ストア圧縮に使用されます。 最適化操作を実行して、列ストアにすべてのデルタ行グループを強制的に唯一の方法では、インデックスを再構築します。

この例では、クラスター化列ストア インデックスを再構築し、列ストアにすべてのデルタ行グループを強制する方法を示します。 この最初の手順では、クラスター化列ストア インデックスを含む FactInternetSales2 テーブルを準備し、最初の&4; つの列にデータを挿入します。

-- 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 Server多くの行、行グループを閉じて、データを columnstore に移動する前に追加するのには待機します。 次のステートメントでは、クラスター化 columnstore インデックスは、すべての行、列ストアに強制的に再構築します。

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

SELECT ステートメントの結果は行グループが圧縮されていることを示しています。つまり、行グループの列セグメントは圧縮され、列ストアに格納されます。

E. オフラインでクラスター化列ストア インデックスのパーティションを再構築します。

これを使用する: SQL Server 2012、SQL Server 2014

大規模なクラスター化列ストア インデックスのパーティションを再構築するには、パーティションのオプションを使用して ALTER INDEX REBUILD を使用します。 この例では、12 のパーティションが再構築します。 SQL Server 2016 から始めて、再構築を再編成と置き換えるお勧めします。

ALTER INDEX cci_fact3   
ON fact3  
REBUILD PARTITION = 12;  

F. 保存用圧縮を使用するクラスター化された columstore インデックスを変更します。

適用されません SQL Server 2012。

COLUMNSTORE_ARCHIVE データ圧縮オプションを使用して、さらに、クラスター化列ストア インデックスのサイズを小さくすることができます。 これは、安価なストレージを保持したい以前のデータに対する実用性です。 のみがアクセスできない多くの場合、decomrpess が通常の列ストア圧縮を使用よりも低いのでデータで使用することをお勧めします。

次の例では、保存用圧縮を使用するクラスター化列ストア インデックスを再構築し、次に保管用圧縮を削除する方法を示します。 最終結果では、列ストア圧縮のみを使用します。

--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  

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

次の例で、単一のインデックスを再構築、Employeeテーブルに、AdventureWorks2012データベースです。

ALTER INDEX PK_Employee_EmployeeID ON HumanResources.Employee REBUILD;  

B. テーブルですべてのインデックスを再構築し、オプションを指定する

次の例は、キーワードを指定ALLします。 これにより、AdventureWorks2012 データベースの Production.Product テーブルに関連付けられたすべてのインデックスが再構築されます。 3 つのオプションが指定されます。

適用対象:SQL Server 2008:を通じてSQL Server 2016とAzure SQL データベースです。
ALTER INDEX ALL ON Production.Product  
REBUILD WITH (FILLFACTOR = 80, SORT_IN_TEMPDB = ON, STATISTICS_NORECOMPUTE = ON);  

次の例は、優先度の低いロック オプションを含めて ONLINE オプションを追加し、行の圧縮オプションを追加します。

適用対象:SQL Server 2014を通じてSQL Server 2016とAzure SQL データベースです。
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  
);  

D. LOB 圧縮を行いインデックスを再構成する

次の例では、AdventureWorks2012 データベースの単一のクラスター化インデックスを再構成します。 インデックスではリーフ レベルに LOB データ型が含まれるので、このステートメントではラージ オブジェクト データを含むすべてのページが圧縮されます。 既定値が ON であるため、WITH (LOB_COMPACTION) オプションの指定は必須ではありません。

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

E. インデックスにオプションを設定する

次の例では、AdventureWorks2012 データベースのインデックス AK_SalesOrderHeader_SalesOrderNumber にいくつかのオプションを設定します。

適用対象:SQL Server 2008:を通じてSQL Server 2016とAzure SQL データベースです。
ALTER INDEX AK_SalesOrderHeader_SalesOrderNumber ON  
    Sales.SalesOrderHeader  
SET (  
    STATISTICS_NORECOMPUTE = ON,  
    IGNORE_DUP_KEY = ON,  
    ALLOW_PAGE_LOCKS = ON  
    ) ;  
GO

F. インデックスを無効にする

次の例は、上の非クラスター化インデックスを無効になります、Employeeテーブルに、AdventureWorks2012データベースです。

ALTER INDEX IX_Employee_ManagerID ON HumanResources.Employee DISABLE;

G. 制約を無効化する

次の例で、PRIMARY KEY インデックスを無効にすると、PRIMARY KEY 制約を無効にしますAdventureWorks2012データベースです。 基になるテーブルに対する FOREIGN KEY 制約は自動的に無効になり、警告メッセージが表示されます。

ALTER INDEX PK_Department_DepartmentID ON HumanResources.Department DISABLE;  

結果セットでは、次の警告メッセージが返されます。

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'.

H. 制約を有効にする

次の例では、例 F で無効にした PRIMARY KEY および FOREIGN KEY 制約を有効にします。

PRIMARY KEY 制約は、PRIMARY KEY インデックスを再構築することにより有効にできます。

ALTER INDEX PK_Department_DepartmentID ON HumanResources.Department REBUILD;  

次に FOREIGN KEY 制約を有効にします。

ALTER TABLE HumanResources.EmployeeDepartmentHistory  
CHECK CONSTRAINT FK_EmployeeDepartmentHistory_Department_DepartmentID;  
GO  

I. パーティション インデックスを再構築する

次の例には、1 つのパーティション、パーティション番号が再構築5、パーティション インデックスのIX_TransactionHistory_TransactionDateで、AdventureWorks2012データベースです。 パーティション 5 はオンラインで再構築され、優先度の低いロックの 10 分間の待機時間が、インデックスの再構築操作によって取得された各ロックに個別に適用されます。 この期間中に、インデックスの再構築を完了するためのロックを取得できない場合は、再構築操作のステートメントが中止されます。

適用対象:SQL Server 2014を通じてSQL Server 2016とAzure SQL データベースです。
-- 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  

J. インデックスの圧縮設定を変更する

次の例では、非パーティション行ストア テーブルのインデックスを再構築します。

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

追加のデータ圧縮の例についてを参照してください。データ圧縮します。

K. 基本構文

ALTER INDEX index1 ON table1 REBUILD;  
  
ALTER INDEX ALL ON table1 REBUILD;  
  
ALTER INDEX ALL ON dbo.table1 REBUILD;  

CREATE INDEX (TRANSACT-SQL)
CREATE SPATIAL INDEX (TRANSACT-SQL)
CREATE XML INDEX (TRANSACT-SQL)
DROP INDEX (TRANSACT-SQL)
インデックスと制約を無効にします。
XML インデックス (SQL Server)
オンライン インデックスの操作を実行します。
インデックスを再構築の再編成と
sys.dm_db_index_physical_stats (TRANSACT-SQL)
EVENTDATA (TRANSACT-SQL)

コミュニティの追加

追加
表示: