# 11.2.索引类型
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索引的特定运算符因索引策略而异。对于具有线性排序顺序的数据类型,索引数据对应于每个块范围的列中值的最小值和最大值。这支持使用以下运算符进行索引查询:
< <= = >= >