セカンダリインデックス
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/'};