CREATE INDEX

テーブルの1つのカラムを対象とした新しいインデックスを定義します。

テーブルの1つのカラムを対象とした新しいインデックスを定義します。そのカラムに既にデータが含まれている場合は、この文の実行時にカラムのインデックスが作成されます。インデックスが作成された後は、カラムのデータが変更されると自動的に更新されます。DataStax Enterpriseは、PRIMARY KEYのパーティション・カラムとクラスター・カラム、コレクション、静的カラムを含む、大半のカラムを対象としたインデックスの作成をサポートしています。インデックスの作成はパフォーマンスに影響を及ぼす可能性があります。インデックスを作成する前に、インデックスを作成すべき場合と作成すべきでない場合について把握しておいてください。

制約事項: カウンター・カラムのインデックスの作成はサポートされていません。マップの場合は、キーと値のいずれかのインデックスを作成してください。

構文

CREATE INDEX [IF NOT EXISTS] index_name
ON keyspace_name.table_name [KEYS| FULL] (column_name)
表 1. 凡例
構文規則 説明
大文字 リテラル・キーワード。
小文字 リテラル以外。
イタリック体 変数値。ユーザー定義値と置き換えます。
[] 任意。角かっこ( [] )で任意指定のコマンド引数を囲みます。角かっこは入力しないでください。
( ) グループ。丸かっこ(( ))は、選択肢を含むグループを示します。丸かっこは入力しないでください。
| または。縦棒( | )で代替要素を区切ります。要素のいずれかを入力してください。縦棒は入力しないでください。
... 繰り返し可能。省略記号(...)は、構文要素を必要な回数だけ繰り返すことができることを示します。
'Literal string' 単一引用符( ' )でCQL文内のリテラル文字を囲みます。大文字を維持するには、単一引用符を使用します。
{ key : value } マップ・コレクション。中かっこ( { } )でマップ・コレクションまたはキーと値のペアを囲みます。コロンでキーと値を区切ります。
<datatype1,datatype2> セット、リスト、マップ、またはタプル。山かっこ(< >)で、セット、リスト、マップまたはタプル内のデータ型を囲みます。データ型はコンマで区切ります。
cql_statement; CQL文の終了。セミコロン( ; )ですべてのCQL文を終了します。
[--] コマンドライン・オプションとコマンド引数は、2つのハイフン(--)で区切ります。この構文は、引数がコマンドライン・オプションと間違われる可能性がある場合に役立ちます。
' <schema> ...</schema> ' 検索CQLのみ:単一引用符( ' )でXMLスキーマ宣言全体を囲みます。
@xml_entity='xml_entity_type' 検索CQLのみ:スキーマ・ファイルおよびsolrConfigファイル内のXML要素を上書きするための実体とリテラル値を示します。
index_name
任意指定のインデックス識別子。インデックス名が指定されていない場合は、「table_name_column_name_idx」という名前がDataStax Enterpriseによって指定されます。特殊文字を使用する場合や大文字と小文字の区別を維持する場合は、引用符で囲みます。

クラスター化カラムを対象としたインデックスの作成

複合パーティション・キーを持つテーブルを定義し、クラスター化カラムを対象としたインデックスを作成します。

CREATE TABLE mykeyspace.users (
   userID uuid,
   fname text,
   lname text,
   email text,
   address text,
   zip int,
   state text,
  PRIMARY KEY ((userID, fname), state)
);
      
CREATE INDEX ON mykeyspace.users (state);

セット・コレクションまたはリスト・コレクションを対象としたインデックスの作成

セット・コレクションまたはリスト・コレクション・カラムを対象としたインデックスを、他のカラムの場合と同様に作成します。CREATE INDEX文の末尾でコレクション・カラムの名前を丸かっこで囲んで指定します。たとえば、電話番号のコレクションをユーザー・テーブルに追加して、phonesセットのデータのインデックスを作成します。

ALTER TABLE users ADD phones set<text>;
CREATE INDEX ON users (phones);

コレクションがマップの場合は、マップ値を対象としたインデックスを作成できます。usersテーブルに、todoマップの例にある以下のマップ・データが含まれていると仮定します。

{'2014-10-2 12:10' : 'die' }

マップ・キー(つまりタイムスタンプ)はコロンの左側にあり、マップ値(ここでは'die')はコロンの右側にあります。インデックスは、マップ・キーとマップ・エントリーの両方を対象に作成できます。

マップ・キーを対象としたインデックスの作成

マップ・コレクション・キーを対象としたインデックスを作成できます。コレクションのマップ値のインデックスが存在する場合は、マップ・コレクション・キーを対象としたインデックスを作成する前に、そのインデックスを削除します。

マップ・キーのインデックスを作成するには、ネストした丸かっこの中にKEYSキーワードとマップ名を入れます。たとえば、usersテーブル内のtodoマップに、コレクション・キー、つまりタイムスタンプのインデックスを作成します。
CREATE INDEX todo_dates ON users (KEYS(todo));

テーブルをクエリーするには、WHERE句でCONTAINS KEYを使用します。

マップ・エントリーを対象としたインデックスの作成

マップ・エントリーを対象としたインデックスを作成できます。ENTRIESインデックスは、既存のインデックスを含まないテーブルのマップ・カラムにのみ作成できます。

コレクション・エントリーのインデックスを作成するには、ネストした丸かっこの中にENTRIESキーワードとマップ名を入れます。たとえば、raceテーブルのリスト内のコレクション・エントリーのインデックスを作成します。
CREATE INDEX entries_idx ON race (ENTRIES(race_wins));

テーブルをクエリーするには、WHERE句を使用します。

フル・コレクションを対象としたインデックスの作成

FROZENコレクション全体を対象としたインデックスを作成できます。FULLインデックスは、既存のインデックスを含まないテーブルのセット、リスト、またはマップのカラムを対象に作成できます。

コレクション・エントリーのインデックスを作成するには、ネストした丸かっこの中にFULLキーワードとコレクション名を入れます。たとえば、rnumbersリストのインデックスを作成します。
CREATE INDEX rnumbers_idx 
ON cycling.race_starts (FULL(rnumbers));

テーブルをクエリーするには、WHERE句を使用します。