# 11.2.索引类型

11.2.1. B-树

11.2.2. 搞砸

11.2.3. 主旨

11.2.4. SP GiST

11.2.5. 杜松子酒

11.2.6. 布林

PostgreSQL提供了几种索引类型:B树、哈希、GiST、SP GiST、GIN和BRIN。每种索引类型都使用最适合不同类型查询的不同算法。默认情况下创建索引命令创建适合最常见情况的B树索引。其他索引类型是通过写入关键字来选择的使用后跟索引类型名称。例如,要创建哈希索引:

CREATE INDEX name ON table USING HASH (column);

# 11.2.1.B-树

B-树可以处理对可以按某种顺序排序的数据的相等和范围查询。特别是,PostgreSQL查询规划人员将考虑每当使用这些操作符中的一个参与索引列时,使用B-树索引:

<   <=   =   >=   >

与这些运算符的组合等效的构造,例如之间在里面,也可以通过B树索引搜索实现。还有一个是空的不是空的索引列上的条件可以与B树索引一起使用。

优化器还可以对涉及模式匹配操作符的查询使用B树索引喜欢~ 如果图案是一个常量,固定在字符串的开头-例如,比如“foo%”col~“^foo”,但不是像“%bar”这样的列。但是,如果数据库不使用C语言环境,则需要使用特殊的运算符类创建索引,以支持模式匹配查询的索引;看见第11.10节在下面也可以使用B树索引我喜欢~*,但仅当模式以非字母字符开头时,即不受大小写转换影响的字符。

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

# 11.2.2.散列

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

=

# 11.2.3.要点

GiST索引不是一种单一的索引,而是一种基础设施,在其中可以实现许多不同的索引策略。因此,可以使用GiST索引的特定运算符会因索引策略的不同而有所不同操作员类)例如,PostgreSQL的标准发行版包括几个二维几何数据类型的GiST运算符类,它们支持使用以下运算符进行索引查询:

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

(见第9.11节了解这些运算符的含义。)标准分布中包含的GiST运算符类记录在表65.1。许多其他GiST运算符类在contrib收集或作为单独的项目。有关更多信息,请参阅第65章.

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

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

找到离给定目标点最近的十个地方。这样做的能力同样取决于所使用的特定运算符类。在里面表65.1,以这种方式使用的运算符列在“排序运算符”列中。

# 11.2.4.SP GiST

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

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

(见第9.11节了解这些运算符的含义。)标准分布中包含的SP GiST运算符类记录在表66.1.有关更多信息,请参阅第66章.

与GiST一样,SP GiST支持“最近邻”搜索。对于支持距离排序的SP GiST运算符类,中的“排序运算符”列中列出了相应的运算符表66.1.

# 11.2.5.杜松子酒

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

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

<@   @>   =   &&

(见第9.19节了解这些运算符的含义。)标准分布中包含的轧棉机操作员类别记录在表67.1。许多其他轧棉机操作员课程在contrib收集或作为单独的项目。有关更多信息,请参阅第67章.

# 11.2.6.布林

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

<   <=   =   >=   >

标准分布中包含的BRIN运算符类别记录在表68.1.有关更多信息,请参阅第68章.