
# 如何使用二级索引
#### 什么是二级索引
对于GeminiDB Cassandra，Primary Key就是一级索引，查询时通过指定对应Primary Key，就可以直接检索到对应记录。如果需要根据非Primary Key列进行查询，此时需要用到二级索引。
#### 二级索引原理
二级索引的实现其实就是创建一张隐式的表，该表的Primary Key是创建索引的列，该表的值是原表的Primary Key。
假设有一张playlists表，表结构如下：
```
CREATE TABLE playlists (
id int,
song_id int,
song_order int,
album text,
artist text,
title text,
PRIMARY KEY (id, song_id));
```
查询结果如下：
图1查询结果   
![](https://support.huaweicloud.com/cassandraug-nosql/zh-cn_image_0000001165805125.png "点击放大")
如果对artist字段建立索引，则索引隐式的表的结构如下所示：
图2查询结果   
![](https://support.huaweicloud.com/cassandraug-nosql/zh-cn_image_0000001165885159.png "点击放大")
其中，artist是索引表的Primary Key，id列、song_id列是索引表的普通列，即原表的Primary Key。
#### 什么场景下不建议使用索引
- 列中重复值过多 例如某一表中有一亿条数据，且artist一致，这种情况不建议索引artist列。
  
- counter列不能进行索引
- 频繁更新或者删除的列
 
#### 如何使用索引
1. 创建索引 **CREATE INDEX artist_names ON playlists( artist );**
   **注意：**如果原表中有大量数据，会涉及到索引数据的重建，只有当索引数据重建完成以后才能查询索引。
   您可以通过查询系统的"IndexInfo"，查看索引是否重建完成。如果有您创建的索引的名字，表示索引数据已经重建完成。
   图3查询结果   
   ![](https://support.huaweicloud.com/cassandraug-nosql/zh-cn_image_0000001165805127.png) 
2. 通过直接指定索引列，查询索引。
   图4查询结果   
   ![](https://support.huaweicloud.com/cassandraug-nosql/zh-cn_image_0000001165885157.png "点击放大")
   ![](https://support.huaweicloud.com/cassandraug-nosql/public_sys-resources/note_3.0-zh-cn.png)
   每张表可以创建多个索引，且索引会影响写入性能。
   
 
