11.2. 索引类型

PostgreSQL 提供了几种索引类型:B 树,哈希,GiST,SP-GiST,GIN 和 BRIN。每种索引类型使用最适合不同类型查询的不同算法。默认情况下,CREATE INDEX命令创建 B 树索引,这些索引适合最常见的情况。

B 树可以处理对数据的相等性和范围查询,这些数据可以按某种 Sequences 进行排序。尤其是,只要使用以下一种运算符的比较涉及到索引列,PostgreSQL 查询计划器就会考虑使用 B 树索引:

<
<=
=
>=
>

也可以使用 B 树索引搜索来实现与这些运算符的组合等效的构造,例如BETWEENIN。同样,索引列上的IS NULLIS NOT NULL条件可以与 B 树索引一起使用。

优化器还可以使用 B 树索引进行涉及模式匹配运算符LIKE~的查询.如果模式是一个常数并且锚定在字符串的开头,例如col LIKE 'foo%'col ~ '^foo',但不是col LIKE '%bar'。但是,如果数据库不使用 C 语言环境,则需要使用特殊的运算符类创建索引以支持模式匹配查询的索引。请参阅下面的Section 11.9。也可以对ILIKE~*使用 B 树索引,但前提是该模式以非字母字符(即不受大写/小写转换影响的字符)开头。

B 树索引还可以用于按排序 Sequences 检索数据。这并不总是比简单的扫描和排序要快,但通常会有所帮助。

哈希索引只能处理简单的相等比较。每当使用=运算符进行比较时,查询计划者将考虑使用哈希索引。以下命令用于创建哈希索引:

CREATE INDEX name ON table USING HASH (column);

GiST 索引不是单一的索引,而是可以在其中实现许多不同索引策略的基础结构。因此,可以使用 GiST 索引的特定运算符根据索引策略(* operator class *)而有所不同。例如,PostgreSQL 的标准发行版包括针对几种二维几何数据类型的 GiST 运算符类,它们支持使用这些运算符的索引查询:

<<
&<
&>
>>
<<|
&<|
|&>
|>>
@>
<@
~=
&&

(有关这些运算符的含义,请参见Section 9.11。)Table 62.1中记录了标准发行版中包含的 GiST 运算符类。 contrib集合中或作为独立项目提供了许多其他 GiST 运算符类。有关更多信息,请参见Chapter 62

GiST 索引还能够优化“最近邻居”搜索,例如

SELECT * FROM places ORDER BY location <-> point '(101,456)' LIMIT 10;

查找最接近给定目标点的十个位置。再次执行此操作的能力取决于所使用的特定运算符类。在Table 62.1中,可以以这种方式使用的运算符在“Order 运算符”列中列出。

像 GiST 索引一样, SP-GiST 索引提供了支持各种搜索的基础结构。 SP-GiST 允许实现各种不同的基于磁盘的非平衡数据结构,例如四叉树,k-d 树和基数树(重试)。例如,PostgreSQL 的标准发行版包括用于二维点的 SP-GiST 运算符类,它们支持使用这些运算符的索引查询:

<<
>>
~=
<@
<^
>^

(有关这些运算符的含义,请参见Section 9.11。)Table 63.1中记录了标准发行版中包含的 SP-GiST 运算符类。有关更多信息,请参见Chapter 63

GIN 索引是“反向索引”,适用于包含多个组件值的数据值,例如数组。倒排索引为每个组件值包含一个单独的条目,并且可以有效地处理查询,以测试特定组件值的存在。

像 GiST 和 SP-GiST 一样,GIN 可以支持许多不同的用户定义的索引策略,并且可以与 GIN 索引一起使用的特定运算符取决于索引策略。例如,PostgreSQL 的标准发行版包括用于数组的 GIN 运算符类,该类支持使用以下运算符进行索引查询:

<@
@>
=
&&

(有关这些运算符的含义,请参见Section 9.18。)Table 64.1中记录了标准发行版中包含的 GIN 运算符类。 contrib集合中或作为独立项目提供了许多其他 GIN 运算符类。有关更多信息,请参见Chapter 64

BRIN 索引(“块范围索引”的缩写)存储有关表的连续物理块范围中存储的值的摘要。像 GiST,SP-GiST 和 GIN 一样,BRIN 可以支持许多不同的索引策略,并且可以与 BRIN 索引一起使用的特定运算符取决于索引策略。对于具有线性排序 Sequences 的数据类型,索引数据对应于每个块范围的列中值的最小值和最大值。这支持使用以下运算符的索引查询:

<
<=
=
>=
>

标准发行版中包含的 BRIN 运算符类记录在Table 65.1中。有关更多信息,请参见Chapter 65