Cassandra 二级索引使用指南

举报
geminidb_fans 发表于 2020/07/31 18:15:16 2020/07/31
【摘要】 1.什么是二级索引对于Cassandra来说,Primary Key 就是一级索引,查询时候可以指定对应Primary Key 就可以直接检索到对应记录。如果需要根据非Primary Key 列进行查询呢? 这个时候就需要用到二级索引。二级索引首先要了解是辅助索引,它的目的就是为了先找到一级索引,然后根据一级索引再找到对应记录。2.二级索引原理二级索引的实现其实就是创建一张隐式的表,该表的P...

1.什么是二级索引

对于Cassandra来说,Primary Key 就是一级索引,查询时候可以指定对应Primary Key 就可以直接检索到对应记录。如果需要根据非Primary Key 列进行查询呢? 这个时候就需要用到二级索引。二级索引首先要了解是辅助索引,它的目的就是为了先找到一级索引,然后根据一级索引再找到对应记录。

2.二级索引原理

二级索引的实现其实就是创建一张隐式的表,该表的Primary Key 是创建索引的列,该表的值是原表的Primary Key.

假设我们有一张playlists 表,表结构如下:

1
2
3
4
5
6
7
8
1    CREATE TABLE playlists (    
2     id  int,    
3    song_id int,    
4    song_order int,    
5    album text,    
6    artist text,    
7    title text,    
8    PRIMARY KEY ( id , song_id));

查询结果如下:

image.png


现在我们如果对 artist字段建立索引,之前提到的索引隐式的表的结构就是下面这样:

image.png


其中 artist 就是索引表的 primary key ,列id 是索引表的普通列( 其实就是原表的primary key )

3.什么场景下不建议使用索引

1.列重复值过多

  比如上例中的表有一亿条数据,每首歌的artist 都是一样的,这种情况不建议索引artist列

2.counter列不能进行索引

3.频繁更新或者删除的列

4.索引使用方法

索引使用十分简单,执行下面sql就可以创建索引

1
CREATE INDEX artist_names ON playlists( artist );

注意:如果原表中有大量数据,会涉及到索引数据的重建,只有当所以数据重建完成以后才能进行索引的查询,查看索引是否重建的方法可以通过查询系统的IndexInfo ,如果有我们创建的索引的名字,则表示索引数据已经重建完成,如下图:



image.png

索引查询也十分简单,查询时候直接指定索引列即可:

image.png

每张表可以创建多个索引,索引会影响写入性能,这点需要注意


【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。