Cassandra 文档

版本

您正在查看预发布版本的文档。

二级索引

CQL 支持在表上创建二级索引,允许对表的查询使用这些索引。二级索引由由

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 选项。如果使用该选项,如果索引已经存在,则该语句将是无操作的。

示例:

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 关键字可以选择指定索引类型。有两种内置类型

  • 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,在这种情况下,该操作是无操作的。