Table of Contents
本章定义核心 PostgreSQL 系统与 索引访问方法之间的接口,后者管理各个索引 类型。 核心系统对索引的了解仅限于这里规定的内容,因此通过编写附加代码来 开发全新的索引类型是可能的。
PostgreSQL 中的所有索引在技术上都是所谓的
二级索引;也就是说,索引在物理上与它描述的表
文件是分开的。
每个索引都作为它自己的物理
关系存储,因此在
pg_class 目录中有一个描述它的条目。
索引的内容完全由它的索引访问方法控制。
在实践中,所有索引访问方法都把索引划分为标准大小的页面,以便使用
常规的存储管理器和缓冲区管理器来访问索引内容。
(此外,所有现有的索引访问方法都使用
Section 66.6 中描述的标准页面布局,
大多数还对索引元组头部使用相同的格式;但这些决定并不被强加给访问
方法。)
索引实质上是从某些数据键值到索引父表中行版本(元组)的 元组标识符(即 TID)的映射。 一个 TID 由一个块号和该块内的一个条目号组成(见 Section 66.6)。 这些信息足以从表中取回特定的行版本。 索引并不直接知道在 MVCC 之下同一个逻辑行可能存在多个现存版本; 对索引而言,每个元组都是一个需要自己的索引条目的独立对象。 因此,对行的更新总是为该行创建全新的索引条目,即使键值没有变化。 (HOT 元组是这一陈述的例外;不过索引也不处理它们。) 死元组的索引条目会在死元组本身被回收时(通过清理)被回收。