在Cassandra中创建和删除索引

Cassandra 创建索引

“Create index”命令会在用户指定的列上创建索引。如果列中已存在要索引的数据,Cassandra会在执行“create index”语句时为数据创建索引。

  • 创建索引后,Cassandra会在插入新数据时自动对其进行索引。
  • 索引不能创建在主键上,因为主键本身已经被索引了。
  • Cassandra 不支持对集合(collections)创建索引。
  • 如果没有为某列创建索引,Cassandra 将无法过滤该列,除非该列是主键。

因此,要在Cassandra中过滤列,就需要创建索引。

语法

Create index IndexName on KeyspaceName.TableName(ColumnName);

示例

下图显示了在未创建索引时尝试过滤“dept”列的情况。作为响应,返回了错误。

Cassandra Create Index

下图显示了在 dept 列上创建索引的情况。

Cassandra Create Index

Create index DeptIndex on University.Student(dept);

下图显示了将成功过滤“dept”列的情况。

Cassandra Create Index

select * from University.Student where dept='CS';

Cassandra 删除索引

“Drop index”命令会删除指定的索引。如果在创建索引时未指定索引名称,则索引名称为 TableName_ColumnName_idx。

  • 如果索引不存在,除非使用了 IF EXISTS,否则会返回错误;使用 IF EXISTS 则不会执行任何操作。
  • 创建索引时,您必须将 keyspace 名称与索引名称一起指定,否则索引将从当前 keyspace 中删除。

语法

Drop index IF EXISTS KeyspaceName.IndexName

示例

下图显示了执行“Drop index”命令删除 DeptIndex 索引的快照。

Cassandra Drop Index

drop index IF EXISTS University.DeptIndex;

命令成功执行后,DeptIndex 将从 keyspace 中删除。现在数据将无法通过 dept 列进行过滤。