历史版本。 PostgreSQL 9.3 已结束支持。 2018-11-08. 请参阅 当前版本手册.
第 57 章 GIN 索引
57.1. 简介 #
GIN 是 Generalized Inverted Index(通用倒排索引)的缩写。GIN 被设计用于处理这样一类情况:要建立索引的项是组合值,而索引需要处理的查询则要搜索出现在这些组合项内部的元素值。例如,这些项可以是文档,而查询可以是搜索包含特定词语的文档。
我们用项来指代要被索引的组合值,用键来指代其中的元素值。GIN 总是存储并搜索键,而不是项值本身。
GIN 索引存储一组(键,倒排列表)对,其中一个倒排列表(posting list)是一个包含出现该键的行 ID 的集合。由于一个项可以包含多个键,同一个行 ID 可以出现在多个倒排列表中。每个键值只会被存储一次,因此在同一个键大量重复出现的场景下,GIN 索引会非常紧凑。
GIN 之所以是通用的,是因为 GIN 访问方法的代码不需要知道它所加速的具体操作。相反,它使用为特定数据类型定义的自定义策略。该策略定义了如何从被索引项和查询条件中提取键,以及如何判断一个包含查询中某些键值的行是否真正满足该查询。
GIN 的一个优点在于,它允许由数据类型所属领域的专家来开发带有合适访问方法的自定义数据类型,而不必依赖数据库专家。这一点与使用 GiST 的优势非常相似。
PostgreSQL 中的 GIN 实现主要由 Teodor Sigaev 和 Oleg Bartunov 维护。关于 GIN 的更多信息,可在他们的网站上找到。