GiST
可扩展检索
GiST 并不是某一种索引,而是可以实现多种索引策略的基础框架。因此,能与 GiST 索引配合的具体运算符取决于索引策略,即操作符类。例如,PostgreSQL 标准发行版为多种二维几何数据类型提供 GiST 操作符类,支持使用下列运算符的索引查询:
当前查看 PostgreSQL 18.6。
能力 · PostgreSQL 18.6
能力结论来自对应版本的文档。有条件支持取决于操作符类、索引类型或查询,不能视为普遍保证。
| 能力 | 支持状态 | 条件与证据 |
|---|---|---|
| 有序输出 | 不支持 | 普通的有序输出与按运算符排序是不同能力,例如按近邻距离排序。 同版本英文证据 |
| 唯一键 | 不支持 | 这里指唯一索引,排除约束采用不同的约定。 |
| 多键列 | 支持 | 多个检索键与不参与检索的 INCLUDE 附加列是不同概念。 同版本英文证据 |
| INCLUDE 附加列 | 支持 | 附加列不会成为检索键。过宽的附加数据可能超过索引元组大小限制。 同版本英文证据 |
| 仅索引扫描 | 有条件 | 查询必须使用索引覆盖的值;能否避免访问堆取决于可见性映射状态。 同版本英文证据 |
| 按距离排序 | 有条件 | 可用性取决于所选操作符类和排序运算符。 同版本英文证据 |
| 并行索引扫描 | 不支持 | 多个进程协作扫描同一索引,不同于并行位图堆扫描,也不同于 Parallel Append 下各自独立的串行扫描。 同版本英文证据 |
| 并行构建索引 | 不支持 | 并行构建与并行扫描分别记录,还取决于工作进程是否可用、配置和构建阶段。 同版本英文证据 |
查询、运算符与限制
CREATE INDEX name ON table_name USING gist (column_name);这是语法模板;使用时请替换表、列占位符,并选择兼容的操作符类。
GiST 并不是某一种索引,而是可以实现多种索引策略的基础框架。因此,能与 GiST 索引配合的具体运算符取决于索引策略,即操作符类。例如,PostgreSQL 标准发行版为多种二维几何数据类型提供 GiST 操作符类,支持使用下列运算符的索引查询:
<< &< &> >> <<| &<| |&> |>> @> <@ ~= &&(这些操作符的含义见 第 9.11 节 。)标准发布版自带的 GiST 操作符类记录在 表 65.1 中。还有许多其他 GiST 操作符类可在 contrib 集合或独立项目中获得。更多信息见 第 65.2 节 。
GiST 索引还能够优化 “ 最近邻 ” 搜索,例如:
SELECT * FROM places ORDER BY location <-> point '(101,456)' LIMIT 10;这会找出距离给定目标点最近的十个地点。是否能做到这一点,同样取决于所使用的具体操作符类。在 表 65.1 中,可以按这种方式使用的操作符列在 “ 排序操作符 ” 这一列中。
存储参数
通过 CREATE INDEX … WITH 或 ALTER INDEX … SET 设置索引参数。默认值和实际行为取决于访问方法及所选 PostgreSQL 版本。
fillfactor
控制索引方法尝试将索引页填充到多满。对于 B-树,在初始构建索引时,以及在右侧扩展索引(加入新的最大键值)时,叶子页都会填充到这一百分比。如果页面随后变成全满,就会发生分裂,从而导致磁盘上的索引结构碎片化。B-树默认使用 90 的填充因子,但也可以选择 10 到 100 之间的任意整数值。
对预计会有大量插入和/或更新的表,在 CREATE INDEX 时为 B-树索引设置较低的填充因子会有好处(即在向表批量装载数据之后)。50 到 90 范围内的值可以有效地 “ 平滑 ” B-树索引生命周期早期页面分裂的 速率 (这样降低填充因子甚至可能减少页面分裂的绝对数量,不过这一效果高度依赖工作负载)。 第 65.1.4.2 节 中描述的 B-树自底向上索引删除技术依赖于页面上有一些 “ 额外 ” 空间来存储 “ 额外 ” 的元组版本,因此也会受到填充因子影响(不过通常影响不大)。
在某些其他特定情况下,在 CREATE INDEX 时将填充因子提高到 100 可能有助于最大化空间利用率。只有在完全确定该表是静态的(即永远不会受到插入或更新影响)时,才应考虑这样做。否则,将填充因子设为 100 有 损害 性能的风险:即便只有少量更新或插入,也会导致页面突然大量分裂。
其他索引方法以不同但大致类似的方式使用填充因子;默认填充因子因方法而异。
buffering
控制是否使用 第 65.2.4.1 节 中描述的缓冲构建技术来构建索引。设置为 OFF 时禁用缓冲构建,设置为 ON 时启用,设置为 AUTO 时初始为禁用,但一旦索引大小达到 effective_cache_size ,就会在运行过程中启用。默认值为 AUTO 。注意,如果可以使用排序构建,则除非指定 buffering=ON ,否则会改用排序构建而不是缓冲构建。
版本比较
这些样本的文档能力状态和存储参数清单没有差异.
比较范围为能力状态和文档中的存储参数名称,不覆盖全部算法、性能特点、参数定义和发布说明变化。
文档记录的历史
PostgreSQL 11 → 12
- INCLUDE 附加列: 不支持 → 支持
PostgreSQL 10 → 11
- 并行索引构建: 未确定 → 不支持 (来源覆盖变化)
PostgreSQL 9.6 → 10
- 并行索引扫描: 未确定 → 不支持 (来源覆盖变化)
PostgreSQL 9.5 → 9.6
- 仅索引扫描: 未确定 → 有条件 (来源覆盖变化)
PostgreSQL 9.1 → 9.2
- 新增记录的存储参数:
buffering
PostgreSQL 9.0 → 9.1
- 距离排序: 未确定 → 有条件 (来源覆盖变化)
相关文档与对象
来源与构建标识
原始证据来自英文手册构建 18.6。中文译文另列来源,不将文档结论作为运行时能力测量。
- PostgreSQL 18.6: GiST
- PostgreSQL 18.6 · catalog-pg-am
- PostgreSQL 18.6 · hash-index
- PostgreSQL 18.6 · indexam
- PostgreSQL 18.6 · indexes-index-only-scans
- PostgreSQL 18.6 · indexes-multicolumn
- PostgreSQL 18.6 · indexes-opclass
- PostgreSQL 18.6 · indexes-ordering
- PostgreSQL 18.6 · indexes-unique
- PostgreSQL 18.6 · parallel-plans
- PostgreSQL 18.6 · sql-createindex
来源指纹
- 手册构建
- PostgreSQL 18.6 Documentation
- 组合页面 SHA-256
0e39ebd4fddbd990280e62f4503f0bd18765bbd990dccf4cba976b5d47da45e7- 手册清单记录的源码归档
- 18.6
- 手册清单记录的归档 SHA-256
555610c24d53e4316da5b7d3fc25c279d96856d5e0e23ee308c328c5fa881d9f
- indexes-types.html:
cee340145a2ef5fbd807f66755b10d22bb049e328c460f572f45ad6193e7e4a1 - catalog-pg-am.html:
579364179365a51945e2edb6481df5d198916c2c725e506f166824dedf08994c - hash-index.html:
b994550220e1ee05648d09804c9eb2302834e07e261932420a96605d7c9c6140 - indexam.html:
0a38f7c0ac0541f31e086c83a624e782c15367456578a6dd3329882516bc1080 - indexes-index-only-scans.html:
2322ec12b82f3fd01ee4072049caaa5a0190148ac68d98c0fcd6eda958828a83 - indexes-multicolumn.html:
c0a799ec49b8ef057a63d465fb1d72a3b81e16d652c28a71734d45592d081202 - indexes-opclass.html:
07de06abf3a2aff2a891a2789def434d9b76705e54d45ca5338dc13451ae2962 - indexes-ordering.html:
85fac99c7c66ed19dd021f12b5cc53ce18aa5bfa4b56c8c168317f99b8f12d3b - indexes-unique.html:
7c3eac7fa180b22534ff01df0c68155f15b6b360ffe35507c5266059116840db - parallel-plans.html:
62207d207bead82b01b59dc119c4f95856f08655cc11d4699a05a40867ed2070 - sql-createindex.html:
6aa00da55815d13d0355dd25cb1cdb603fa36964993f164d1b6f486011282580
返回 Index AM · 已记录于 PostgreSQL 9.0 至 20;最早样本不代表实际引入版本。