Redrock Postgres 搜索 英文
版本: 9.3 / 9.4 / 9.5 / 9.6 / 10 / 11 / 12 / 13 / 14 / 15 / 16 / 17

第 62 章。索引访问方法接口定义

目录

62.1. 索引的基本 API 结构
62.2. 索引访问方法函数
62.3. 索引扫描
62.4. 索引锁定考量
62.5. 索引唯一性检查
62.6. 索引成本估算函数

本章定义了核心 PostgreSQL 系统与索引访问方法(管理个人索引类型)之间的接口。核心系统除了这里指定的内容之外对索引一无所知,因此可以通过编写附加代码开发全新的索引类型。

PostgreSQL 中的所有索引在技术上称为辅助索引;也就是说,索引在物理上与它描述的表文件是分开的。每个索引都存储为其自己的物理关系,因此在 pg_class 目录中有一个条目对它进行描述。索引的内容完全受其索引访问方法控制。实际上,所有索引访问方法都将索引划分为标准大小的页,以便它们可以使用常规存储管理器和缓冲管理器来访问索引内容。(所有现有的索引访问方法还使用了 第 65.6 节 中描述的标准页布局,大多数都对索引元组头使用相同的格式;但这些决定不是强加给访问方法的。)

索引实际上是将某些数据键值映射到元组标识符TID,即索引父表中的行版本(元组)。TID 包含一个块号和该块中的一个项目号(请参见 第 65.6 节)。这足够从表中获取特定行版本的信息。索引并不知道在 MVCC 下同一逻辑行可能会存在多个现有版本;对于索引来说,每个元组都是一个需要自己索引项的独立对象。因此,即使键值没有更改,对行的更新总是为该行创建全新的索引项。(HOT 元组 是此说法的例外;但索引也不处理这些元组。)死元组的索引项会在死元组本身被回收时回收(通过 vacuum)。