案例:建立合适的索引
创建合适的索引可以加速对表中数据行的检索。索引占用磁盘空间,并且降低添加、删除和更新行的速度。如果需要非常频繁地更新数据或磁盘空间有限,则需要限制索引的数量。在表较大时再建立索引,表中的数据越多,索引的优越性越明显。建议仅在匹配如下某条原则时创建索引:
- 需要经常执行查询的字段。
- 对于存在多字段连接的查询,建议在连接条件字段上建立组合索引。例如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表定义如下:
执行SQL语句查询没有建立索引情况下的执行计划,发现执行时间为48毫秒。
1
|
EXPLAIN PERFORMANCE SELECT * FROM orders WHERE o_custkey = '1106459'; |
优化后
where子句过滤条件的字段是o_custkey,在o_custkey字段上添加一个索引:
1
|
CREATE INDEX idx_o_custkey ON orders (o_custkey) LOCAL; |
执行SQL语句查询建立索引后的执行计划,发现执行时间为18毫秒。