索引类型

AnalyticDB for PostgreSQL支持B-树索引,GiST索引和位图索引,不支持Hash索引和GIN索引。
说明 B-树索引是默认的索引类型。位图索引(Bitmap Index)为每一个键值都存储一个位图,位图索引提供了和常规索引相同的功能但索引空间大大减少。对于区分值区间在100至100,000之间的列位图索引表现最好。

创建索引

使用CREATE INDEX命令在表上创建一个索引。

示例:

在employee表的gender列上创建一个B-树索引。
CREATE INDEX gender_idx ON employee (gender);
在films表中的title列上创建一个位图索引。
CREATE INDEX title_bmp_idx ON films USING bitmap (title);

重建索引

使用REINDEX INDEX命令重建索引。

示例:

重建索引my_index。
REINDEX INDEX my_index;
重建my_table表上的所有索引。
REINDEX TABLE my_table;

删除索引

使用DROP INDEX命令删除一个索引。

示例:

DROP INDEX title_idx;
说明 在加载大量数据时,先删除所有索引并载入数据,然后重建索引会更快。

索引的选择原则

  • 用户的查询负载。

    索引能改进查询返回单一记录或者非常小的数据集的性能,例如OLTP类型查询。

  • 压缩表。

    在被压缩过的追加优化表上,索引也可以提高返回一个目标行集合的查询的性能,只有必要的行才会被解压。

  • 避免在频繁更新的列上建立索引。

    在一个被频繁更新的列上建立索引会增加该列被更新时所要求的写操作数据量。

  • 创建选择性高的B-树索引。

    例如,如果一个表有1000行并且一个列中有800个不同的值,则该索引的选择度为0.8,索引的选择性会比较高。唯一索引的选择度总是1.0。

  • 为低选择度的列使用位图索引。对于区分值区间在100至100,000之间的列位图索引表现最好。
  • 索引在连接中用到的列。

    在被用于频繁连接的一个列(例如一个外键列)上的索引能够提升连接性能,因为这让查询优化器有更多的连接方法可以使用。

  • 索引在谓词中频繁使用的列。

    频繁地在WHERE子句中被引用的列是索引的首选。

  • 避免创建重叠的索引。

    例如在多列索引中,具有相同前导列的索引是冗余的。

  • 批量载入前删掉索引。

    对于载入大量数据到一个表中,请考虑先删掉索引并且在数据装载完成后重建它们,这常常比更新索引更快。

  • 测试并且比较使用索引和不使用索引的查询性能。

    只有被索引列的查询性能有提升时才增加索引。

更多信息

详情请参考Pivotal Greenplum 官方文档