↑↓ 选择↵ 打开⌫ 切换范围完整搜索

PG.CENTER 连接 PostgreSQL 文档、百科与生态知识。由 Pigsty 维护。

支持中的版本: 当前版本 (18) / 17 / 16 / 15 / 14
开发中的版本: 19 / 20devel
已结束支持的版本: 13 / 12 / 11 / 10 / 9.6 / 9.5 / 9.4 / 9.3 / 9.2 / 9.1 / 9.0 / 8.4 / 8.3 / 8.2 / 8.1 / 8.0 / 7.4 / 7.3 / 7.2
历史版本。 PostgreSQL 7.4 已结束支持。 请参阅 当前版本手册.

11.2. 索引类型 #

PostgreSQL 提供几种索引类型:B-树、R-树、GiST 和 Hash。每种索引类型使用不同的算法,分别最适合不同类型的查询。默认情况下,CREATE INDEX 命令会创建B-树索引,它适合最常见的情况。B-树可以处理对能排成某种顺序的数据的等值和范围查询。特别地,只要被索引列参与的比较使用下列操作符之一,PostgreSQL 查询规划器就会考虑使用 B-树索引: <, <=, =, >=, >

如果模式被锚定在字符串的开头,例如 col LIKE 'foo%' 或 col ~ '^foo',而不是col LIKE '%bar',那么优化器也可以对涉及模式匹配操作符 LIKE、ILIKE、~ 和 ~* 的查询使用 B-树索引。但是,如果你的服务器不使用 C 区域,就需要用特殊的操作符类来创建索引。参见下文的第 11.6 节。

R-树索引适合对空间数据的查询。要创建 R-树索引,使用如下形式的命令

CREATE INDEX name ON table USING RTREE (column);

只要被索引列参与的比较使用下列操作符之一,PostgreSQL 查询规划器就会考虑使用R-树索引: <<, &<, &>, >>, @, ~=, && (这些操作符的含义请参阅第 9.9 节。)

Hash 索引只能处理简单的等值比较。只要被索引列参与的比较使用 = 操作符,查询规划器就会考虑使用hash 索引。下面的命令用于创建 hash 索引:

CREATE INDEX name ON table USING HASH (column);

注意

测试表明 PostgreSQL 的 hash 索引的性能并不比 B-树索引好,而且 hash 索引的索引尺寸和构建时间都要糟糕得多。由于这些原因,目前不鼓励使用 hash 索引。

B-树索引方法是 Lehman-Yao 高并发 B-树的一种实现。R-树索引方法使用 Guttman 的二次分裂算法实现标准 R-树。hash 索引方法是 Litwin 线性散列的一种实现。我们提到这些算法只是为了说明所有这些索引方法都是完全动态的,不需要定期优化(例如,与静态散列方法的情况不同)。

报告文档问题

阅读 上游文档. 反馈更正前请先核对 当前版本手册.