CQL支持在表上创建辅助索引,允许表上的查询使用这些索引。辅助索引由以下定义的名称标识:
index_name ::= re('[a-zA-Z_0-9]+')
创建索引
在表上创建辅助索引使用CREATE INDEX语句:create_index_statement ::= CREATE [ CUSTOM ] INDEX [ IF NOT EXISTS ] [index_name
] ONtable_name
'('index_identifier
')' [ USINGstring
[ WITH OPTIONS =map_literal
] ] index_identifier ::=column_name
| ( KEYS | VALUES | ENTRIES | FULL ) '('column_name
')'
例如:
CREATE INDEX userIndex ON NerdMovies (user);
CREATE INDEX ON Mutants (abilityId);
CREATE INDEX ON users (keys(favs));
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/'};
CREATE INDEX语句用于为给定表中给定(现有)的列创建新的(自动)辅助索引。如果需要,可以在ON关键字之前指定索引本身的名称。 如果列的数据已经存在,那么它将被异步索引。创建索引后,在插入时自动对列的新数据进行索引。
尝试创建已存在的索引将返回错误,除非使用IF NOT EXISTS选项。如果使用它,如果索引已经存在,语句将是无操作。
Map中的索引
在Map上创建索引时,您可以在映射键上添加索引也可以在映射值上添加索引。如果列标识符放在keys()函数中,则索引将位于映射键上,从而允许在WHERE子句中使用CONTAINS KEY。否则,索引将在映射值上。
删除索引
删除辅助索引使用DROP INDEX语句:
drop_index_statement ::= DROP INDEX [ IF EXISTS ] index_name
DROP INDEX语句用于删除现有辅助索引。语句的参数是索引名称,可以可选地指定索引的键空间。
如果索引不存在,则语句将返回错误,除非使用IF EXISTS,在这种情况下,操作是无操作。