支持的版本: 当前 (17) / 16 / 15 / 14 / 13
开发版本: devel
不支持的版本: 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

11.2. 索引类型 #

PostgreSQL 提供了几种索引类型:B 树、哈希、GiST、SP-GiST、GIN、BRIN 和扩展 bloom。 每种索引类型都使用不同的算法,这些算法最适合于不同类型的可索引子句。 默认情况下,CREATE INDEX 命令创建 B 树索引,这最适合于大多数常见情况。 其他索引类型通过写入关键字 USING 后跟索引类型名称来选择。 例如,要创建哈希索引

CREATE INDEX name ON table USING HASH (column);

11.2.1. B 树 #

B 树可以处理可以在某种顺序中排序的数据的相等和范围查询。 特别是,当索引列参与使用以下运算符之一的比较时,PostgreSQL 查询规划器将考虑使用 B 树索引

<   <=   =   >=   >

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

对于涉及模式匹配运算符 LIKE~ 的查询,优化器也可以使用 B 树索引,如果 模式是常量并且锚定到字符串的开头 — 例如,col LIKE 'foo%'col ~ '^foo',但不是 col LIKE '%bar'。 但是,如果您的数据库不使用 C 区域设置,则需要使用特殊的运算符类创建索引,以支持模式匹配查询的索引;请参阅下面的第 11.10 节。 也可以使用 B 树索引用于 ILIKE~*,但前提是模式以非字母字符开头,即不受大小写转换影响的字符。

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

11.2.2. 哈希 #

哈希索引存储从索引列的值派生的 32 位哈希代码。 因此,此类索引只能处理简单的相等比较。 当索引列参与使用等于运算符的比较时,查询规划器将考虑使用哈希索引

=

11.2.3. GiST #

GiST 索引不是一种单一的索引,而是一个可以在其中实现许多不同索引策略的基础结构。 因此,可以使用 GiST 索引的特定运算符取决于索引策略(运算符类)。 例如,PostgreSQL 的标准发行版包含用于几个二维几何数据类型的 GiST 运算符类,这些运算符类支持使用以下运算符的索引查询

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

(有关这些运算符的含义,请参阅第 9.11 节。)标准发行版中包含的 GiST 运算符类记录在表 64.1中。 contrib 集合或单独的项目中提供了许多其他 GiST 运算符类。 有关更多信息,请参阅第 64.2 节

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

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

这会查找距离给定目标点最近的十个地点。 执行此操作的能力再次取决于所使用的特定运算符类。 在表 64.1中,可以这种方式使用的运算符列在 排序运算符列中。

11.2.4. SP-GiST #

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

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

(有关这些运算符的含义,请参阅第 9.11 节。)标准发行版中包含的 SP-GiST 运算符类记录在表 64.2中。 有关更多信息,请参阅第 64.3 节

与 GiST 一样,SP-GiST 支持最近邻搜索。 对于支持距离排序的 SP-GiST 运算符类,相应的运算符列在表 64.2中的排序运算符列中。

11.2.5. GIN #

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

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

<@   @>   =   &&

(有关这些运算符的含义,请参阅第 9.19 节。)标准发行版中包含的 GIN 运算符类记录在表 64.3中。 contrib 集合或单独的项目中提供了许多其他 GIN 运算符类。 有关更多信息,请参阅第 64.4 节

11.2.6. BRIN #

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

<   <=   =   >=   >

标准发行版中包含的 BRIN 运算符类记录在表 64.4中。 有关更多信息,请参阅第 64.5 节

提交更正

如果您在文档中发现任何不正确的内容,与您使用特定功能的经验不符或需要进一步澄清的内容,请使用此表单报告文档问题。