PostgreSQL 提供了好几种索引类型∶ B-tree,R-tree,GiST 和散列.每种索引类型都比较适合某些特定的查询类型, 因为它们用了不同的算法. 缺省时, CREATE INDEX 命令将创建一个 B-tree 索引,这也使最常见的情形.特别是在 一个索引了的列涉及到使用下列操作符之一进行比较的时候, PostgreSQL 的查询优化器都会考虑使用 B-tree 索引∶ <, <=, =, >=, >
R-tree 索引特别适合于空间数据.要创建一个 R-tree 索引, 使用下面形式的命令
CREATE INDEX name ON table USING RTREE (column);
当一个索引了的列涉及到使用下列操作符之一进行比较的时候, PostgreSQL 的查询优化器都会考虑使用 R-tree 索引∶ <<, &<, &>, >>, @, ~=, && (请参考 Section 6.9 获取这些操作符的含义.)
当一个索引了的列涉及到使用 = 操作符 进行比较的时候,查询优化器会考虑使用散列索引. 下面的命令用于创建散列索引∶
CREATE INDEX name ON table USING HASH (column);
注意: 测试表明 PostgreSQL 的散列索引和 B-tree 索引类似或者慢一些, 而且散列索引的尺寸和制作时间要差很多。而且在高度并发的条件下,散列 索引的性能也很差。因此,我们不建议使用散列索引。
B-tree 索引是一个 Lehman-Yao 高并发 B-tree 的实 现。R-tree 索引用 Guttman 的二次分割算法实现了标准的 R-tree。 hash(散列)索引是 Litwin 的线性散列的一个实 现。我们单独的列出这些所用的算法是要表明 所有这些访问模式都是完全动态的并且不必进行周期性的优化(例如,象静 态散列算法常见的那样)。