更新时间:2024-11-05 GMT+08:00

案例:建立合适的索引

创建合适的索引可以加速对表中数据行的检索。索引占用磁盘空间,并且降低添加、删除和更新行的速度。如果需要非常频繁地更新数据或磁盘空间有限,则需要限制索引的数量。在表较大时再建立索引,表中的数据越多,索引的优越性越明显。建议仅在匹配如下某条原则时创建索引:

  • 需要经常执行查询的字段。
  • 对于存在多字段连接的查询,建议在连接条件字段上建立组合索引。例如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毫秒。