pgsql.cc 提供对 postgresql.org 官网内容的中文翻译,由 Pigsty 团队维护。
PostgreSQL提供了多种索引类型:B-树、R 树、Hash 和 GiST。每种索引类型都采用不同的算法,分别最适合不同类型的查询。默认情况下,CREATE INDEX命令创建的是 B-树索引,它适用于最常见的场景。
B-树能够处理可以按某种顺序排序的数据上的等值查询和范围查询。特别是,只要已索引列参与了下列任一操作符的比较,PostgreSQL查询规划器就会考虑使用 B-树索引:
< |
<= |
= |
>= |
> |
与这些操作符组合等价的构造,例如BETWEEN和IN,也可以通过 B-树索引搜索来实现。(但要注意,IS NULL并不等价于=,因此不能使用索引。)
优化器还可以对涉及模式匹配操作符LIKE、ILIKE、~和~*的查询使用 B-树索引,如果模式锚定在字符串的起始位置,例如col LIKE 'foo%'或col ~ '^foo',但不能用于col LIKE '%bar'。不过,如果你的服务器没有使用 C 区域设置,就需要以一个特殊操作符类来创建该索引,才能支持模式匹配查询的索引化。见下文第 11.6 节。
R 树索引适合用于空间数据的查询。要创建一个 R 树索引,可使用如下形式的命令:
CREATE INDEXnameONtableUSING RTREE (column);
只要已索引列参与的是使用下列操作符之一的比较,PostgreSQL查询规划器就会考虑使用 R 树索引:
<< |
&< |
&> |
>> |
@ |
~= |
&& |
(这些操作符的含义见第 9.10 节。)
Hash 索引只能处理简单的等值比较。只要已索引列参与的是使用=操作符的比较,查询规划器就会考虑使用 Hash 索引。使用以下命令创建 Hash 索引:
CREATE INDEXnameONtableUSING HASH (column);
测试表明,PostgreSQL的哈希索引性能并不比 B-树索引好,而且哈希索引的索引大小和构建时间都要差得多。由于这些原因,目前不建议使用哈希索引。
GiST 索引并不是某一种单独的索引,而是一种基础设施,可在其中实现许多不同的索引策略。因此,GiST 索引可使用哪些具体操作符,取决于所采用的索引策略(即操作符类)。更多信息见第 48 章。
B-树索引方法是 Lehman-Yao 高并发 B-树的实现。R 树索引方法使用 Guttman 的二次分裂算法实现标准的 R 树。哈希索引方法是 Litwin 线性哈希的实现。我们提到这些算法只是为了说明所有这些索引方法都是完全动态的,不需要周期性地优化(例如静态哈希方法就是需要周期优化的)。
译文有误、术语不当或页面显示问题,请到译文仓库 pgsty/pgdoc 报告译文问题。 英文原文本身的问题,请在当前版本的对应页面向上游反馈;上游不再修订已结束维护的版本。