CREATE COLUMNSTORE INDEX (Transact-SQL)

指定したテーブルに列ストア インデックスを作成します。 xVelocity メモリ最適化列ストア インデックスは、圧縮された非クラスター化インデックスの一種です。 列ストア インデックスには、テーブルごとに 1 つだけという制限があります。 インデックスはテーブル内にデータがなくても作成できます。 列ストア インデックスを持つテーブルは、更新できません。 列ストアの使用の詳細については、「列ストア インデックス」を参照してください。

注意

リレーショナル インデックスの作成方法の詳細については、「CREATE INDEX (Transact-SQL)」を参照してください。 XML インデックスの作成方法の詳細については、「CREATE XML INDEX (Transact-SQL)」を参照してください。 空間インデックスの作成方法の詳細については、「CREATE SPATIAL INDEX (Transact-SQL)」を参照してください。

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

構文

CREATE [ NONCLUSTERED ] COLUMNSTORE INDEX index_name 
    ON <object> ( column  [ ,...n ] )
    [ WITH ( <column_index_option> [ ,...n ] ) ]
    [ ON {
           { partition_scheme_name ( column_name ) } 
           | filegroup_name 
           | "default" 
         }
    ]
[ ; ]

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

<column_index_option> ::=
{
      DROP_EXISTING = { ON | OFF }
    | MAXDOP = max_degree_of_parallelism
 }

引数

  • NONCLUSTERED
    テーブルの論理順序を示す列ストア インデックスを作成します。 クラスター化された列ストア インデックスは、サポートされていません。

  • COLUMNSTORE
    インデックスが列ストア インデックスになることを示します。

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

  • column
    インデックスの基準となる 1 列または複数列を指定します。 列ストア インデックスには、1,024 列までという制限があります。

  • ON partition_scheme_name**(column_name)**
    ファイル グループが定義されているパーティション構成を指定します。このファイル グループは、パーティション インデックスのパーティションのマップ先となります。 CREATE PARTITION SCHEME を実行して、パーティション構成がデータベース内に存在するようにする必要があります。 column_name には、パーティション インデックスがパーティション分割される対象の列を指定します。 この列は、partition_scheme_name で使用されているパーティション関数の引数のデータ型、長さ、および有効桁数に一致する必要があります。 column_name は、インデックス定義で指定されている列に限定されません。 列ストア インデックスをパーティション分割するとき、データベース エンジンでは、まだ指定されていない場合、パーティション分割列がインデックスの列として追加されます。

    partition_scheme_name または filegroup が指定されないまま、テーブルがパーティション分割されると、インデックスは基になるテーブルと同じパーティション分割列を使用して、同じパーティション構造に配置されます。

    パーティション インデックスの詳細については、「パーティション テーブルとパーティション インデックス」を参照してください。

  • ON filegroup_name
    指定したファイル グループに、指定したインデックスを作成します。 位置の指定がなく、テーブルまたはビューがパーティション分割されていない場合、インデックスには、基になるテーブルまたはビューと同じファイル グループが使用されます。 ファイル グループは既に存在している必要があります。

  • ON "default"
    既定のファイル グループに、指定したインデックスを作成します。

    この文脈での default という語はキーワードではありません。 default は、既定ファイル グループの識別子のため、ON "default" または ON [default] のように区切る必要があります。 "default" を指定する場合は、現在のセッションに対して QUOTED_IDENTIFIER オプションが ON である必要があります。 これが既定の設定です。 詳細については、「SET QUOTED_IDENTIFIER (Transact-SQL)」を参照してください。

<object>::=

インデックスを作成するオブジェクトを、完全修飾または完全修飾ではない形式で指定します。

  • database_name
    データベースの名前を指定します。

  • schema_name
    テーブルが所属するスキーマの名前を指定します。

  • table_name
    インデックスを作成するテーブルの名前を指定します。

<column_index_option>::=

列ストア インデックスを作成するときに使用するオプションを指定します。

  • DROP_EXISTING
    名前付きの、既存のインデックスを削除および再構築することを指定します。 既定値は OFF です。

    • ON
      既存のインデックスは削除され、再構築されます。 指定するインデックス名は、現在存在するインデックスと同じにする必要がありますが、インデックス定義は変更できます。 たとえば、異なる列またはインデックス オプションを指定できます。
    • OFF
      指定したインデックス名が既に存在する場合、エラーが表示されます。 DROP_EXISTING を使用してインデックスの種類を変更することはできません。 旧バージョンと互換性のある構文では、WITH DROP_EXISTING は WITH DROP_EXISTING = ON と同じです。
  • MAXDOP = max_degree_of_parallelism
    インデックス操作中は、max degree of parallelism サーバー構成オプションの構成 構成オプションを無効にします。 並列プランの実行で使用されるプロセッサ数を制限するには、MAXDOP を使用します。 最大数は 64 プロセッサです。

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

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

    • >1
      現在のシステム ワークロードに基づいて、並列インデックス操作で使用される最大プロセッサ数を指定の数以下に制限します。

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

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

    注意

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

説明

一時テーブルにインデックスを作成することもできます。 テーブルが削除されるか、セッションが終了すると、インデックスは削除されます。

一般的なビジネス データ型を列ストア インデックスに含めることができます。 以下のデータ型を列ストア インデックスに含めることができます。

  • char およびvarchar

  • nchar および nvarchar (varchar(max) および nvarchar(max) を除く)

  • decimal (および numeric) (有効桁数が 18 桁よりも多い場合を除く)

  • int、bigint、smallint、および tinyint

  • float (および real)

  • bit

  • money および smallmoney

  • すべての日付と時刻のデータ型 (datetimeoffset で、小数点以下桁数が 2 を超える場合を除く)

以下のデータ型は、列ストア インデックスに含めることができません。

  • binary およびvarbinary

  • ntext、text、および image

  • varchar(max) および nvarchar(max)

  • uniqueidentifier

  • rowversion (および timestamp)

  • sql_variant

  • decimal (および numeric) で、有効桁数が 18 桁よりも多い場合

  • datetimeoffset で、小数点以下桁数が 2 を超える場合

  • CLR 型 (hierarchyid および空間型)

  • xml

基本的な制限

列ストア インデックスには、次の制限があります。

  • 1,024 より多い列を持つことはできません。

  • クラスター化できません。 非クラスター化列ストア インデックスのみが利用可能です。

  • 一意なインデックスにすることはできません。

  • ビューまたはインデックス付きビュー上では作成できません。

  • スパース列を含めることはできません。

  • 主キーまたは外部キーとして機能することはできません。

  • ALTER INDEX ステートメントを使用して変更することはできません。 そのため、削除して再作成する必要があります。 ALTER INDEX を使用して、列ストア インデックスを無効にしてから再作成することができます。

  • INCLUDE キーワードを使用して作成することはできません。

  • インデックスを並べ替えるための ASC または DESC キーワードを含めることはできません。 列ストア インデックスは、圧縮アルゴリズムに従って順序付けされます。 並べ替えを行うと、パフォーマンス上の利点の多くが無効になります。

列ストア インデックスは、以下の機能と組み合わせることはできません。

  • ページと行の圧縮、および vardecimal ストレージ形式 (列ストア インデックスは、既に別の形式で圧縮されているため)

  • レプリケーション

  • 変更の追跡

  • 変更データ キャプチャ

  • Filestream

列ストア インデックスのパフォーマンス上の利点と制限の詳細については、「列ストア インデックス」を参照してください。

権限

テーブルに対する ALTER 権限が必要です。

使用例

A. 単純な非クラスター化インデックスを作成する

次の例では、単純なテーブルとクラスター化インデックスを作成します。その後、列ストア インデックスを作成する構文を示しています。

CREATE TABLE SimpleTable
(ProductKey [int] NOT NULL, 
OrderDateKey [int] NOT NULL, 
DueDateKey [int] NOT NULL, 
ShipDateKey [int] NOT NULL);
GO
CREATE CLUSTERED INDEX cl_simple ON SimpleTable (ProductKey);
GO
CREATE NONCLUSTERED COLUMNSTORE INDEX csindx_simple
ON SimpleTable
(OrderDateKey, DueDateKey, ShipDateKey);
GO

B. すべてのオプションを使用して、単純な非クラスター化インデックスを作成する

次の例では、単純なテーブルとクラスター化インデックスを作成します。その後、列ストア インデックスを作成する構文を示しています。

CREATE NONCLUSTERED COLUMNSTORE INDEX csindx_simple
ON SimpleTable
(OrderDateKey, DueDateKey, ShipDateKey)
WITH (DROP_EXISTING =  ON, 
    MAXDOP = 2)
ON "default"
GO

パーティション テーブルを使用した、より複雑な例については、「列ストア インデックス」を参照してください。

関連項目

参照

sys.column_store_dictionaries (Transact-SQL)

sys.column_store_segments (Transact-SQL)

ALTER INDEX (Transact-SQL)

CREATE PARTITION FUNCTION (Transact-SQL)

CREATE PARTITION SCHEME (Transact-SQL)

DROP INDEX (Transact-SQL)

sys.indexes (Transact-SQL)

sys.index_columns (Transact-SQL)

概念

列ストア インデックス

列ストア インデックス