Cassandra ドキュメント

バージョン

プレリリース版のドキュメントを表示しています。

セカンダリインデックス

CQLはテーブルにセカンダリインデックスを作成することをサポートしており、テーブルに対するクエリでこれらのインデックスを使用できます。セカンダリインデックスは、`CREATE INDEX`によって定義された名前で識別されます。

index_name::= re('[a-zA-Z_0-9]+')

CREATE INDEX

`CREATE INDEX`ステートメントは、特定の(既存の)テーブルの特定の列に対して新しいセカンダリインデックスを作成するために使用されます。必要に応じて、`ON`キーワードの前にインデックス自体の名前を指定できます。

create_index_statement::= CREATE [ CUSTOM ] INDEX [ IF NOT EXISTS ] [ index_name ]
	ON table_name '(' index_identifier ')'
	[ USING index_type [ WITH OPTIONS = map_literal ] ]
index_identifier::= column_name
	| ( KEYS | VALUES | ENTRIES | FULL ) '(' column_name ')'
index_type::= 'sai' | 'legacy_local_table' | fully_qualified_class_name

列にデータが既に存在する場合は、非同期的にインデックス付けされます。インデックスが作成されると、列の新しいデータは挿入時に自動的にインデックス付けされます。既に存在するインデックスを作成しようとすると、`IF NOT EXISTS`オプションを使用しない限りエラーが返されます。このオプションを使用すると、インデックスが既に存在する場合は、ステートメントはno-opになります。

:

CREATE INDEX userIndex ON NerdMovies (user);
CREATE INDEX ON Mutants (abilityId);
CREATE INDEX ON users (KEYS(favs));
CREATE INDEX ON users (age) USING 'sai';
CREATE CUSTOM INDEX ON users (email)
   USING 'path.to.the.IndexClass';
CREATE CUSTOM INDEX ON users (email)
   USING 'path.to.the.IndexClass'
   WITH OPTIONS = {'storage': '/mnt/ssd/indexes/'};

インデックスの種類

`USING`キーワードは、オプションでインデックスの種類を指定します。2つの組み込みの種類があります。

  • legacy_local_table - (デフォルト)レガシーセカンダリインデックス。非表示のローカルテーブルとして実装されます。

  • sai - "ストレージアタッチ型"インデックス。最適化されたSSTable/Memtableアタッチ型インデックスを使用して実装されます。

カスタムインデックスを作成するには、完全修飾クラス名を指定する必要があります。

マップキーへのインデックス

`maps <maps>`にインデックスを作成する際、キーまたは値のいずれかにインデックスを作成できます。列識別子を`keys()`関数内に配置すると、マップキーにインデックスが作成され、`WHERE`句で`CONTAINS KEY`を使用できます。それ以外の場合は、マップ値にインデックスが作成されます。

DROP INDEX

セカンダリインデックスの削除には`DROP INDEX`ステートメントを使用します。

drop_index_statement::= DROP INDEX [ IF EXISTS ] index_name

`DROP INDEX`ステートメントは、既存のセカンダリインデックスを削除するために使用されます。ステートメントの引数はインデックス名であり、オプションでインデックスのキー空間を指定できます。

インデックスが存在しない場合、`IF EXISTS`を使用しない限り、ステートメントはエラーを返します。`IF EXISTS`を使用すると、操作はno-opになります。