# 案例：建立合适的索引
创建合适的索引可以加速对表中数据行的检索。索引占用磁盘空间，并且降低添加、删除和更新行的速度。如果需要非常频繁地更新数据或磁盘空间有限，则需要限制索引的数量。在表较大时再建立索引，表中的数据越多，索引的优越性越明显。建议仅在匹配如下某条原则时创建索引：
- 需要经常执行查询的字段。
- 对于存在多字段连接的查询，建议在连接条件字段上建立组合索引。例如select \* from t1 join t2 on t1.a=t2.a and t1.b=t2.b，可以在t1表上的a，b字段上建立组合索引。
- where子句过滤条件的字段（尤其是范围条件）。
- 经常出现在order by、group by和distinct后的字段。
#### 优化前
列存分区表orders表定义如下：
![](https://support.huaweicloud.com/devg-dws/figure/zh-cn_image_0000001551160526.png "点击放大")
执行SQL语句查询没有建立索引情况下的执行计划，发现执行时间为48毫秒。
```
EXPLAIN PERFORMANCE SELECT * FROM orders WHERE o_custkey = '1106459';
```
![](https://support.huaweicloud.com/devg-dws/figure/zh-cn_image_0000001601476601.png "点击放大")
#### 优化后
where子句过滤条件的字段是o_custkey，在o_custkey字段上添加一个索引：
```
CREATE INDEX idx_o_custkey ON orders (o_custkey) LOCAL;
```
执行SQL语句查询建立索引后的执行计划，发现执行时间为18毫秒。
![](https://support.huaweicloud.com/devg-dws/figure/zh-cn_image_0000001602017897.png "点击放大")
