Skip to content

70.1. 简介#

GIN代表广义倒排索引。GIN旨在处理待索引项为复合值的情况,并且索引需要处理的查询需要搜索出现在复合项中的元素值。例如,项可以是文档,而查询可以是搜索包含特定单词的文档。

我们使用单词来指代待索引的复合值,并使用单词来指代元素值。GIN始终存储和搜索键,而不是项值本身。

GIN索引存储一组(键、发布列表)对,其中发布列表是键出现的行 ID 的集合。由于项可以包含多个键,因此同一个行 ID 可以在多个发布列表中出现。每个键值仅存储一次,因此对于键多次出现的案例,GIN索引非常紧凑。

GIN是广义的,因为GIN访问方法代码不需要知道它加速的具体操作。相反,它使用为特定数据类型定义的自定义策略。该策略定义如何从索引项和查询条件中提取键,以及如何确定包含查询中某些键值的行是否实际满足查询。

使用GIN的一个优点是,它允许数据类型专家(而不是数据库专家)通过适当的访问方法开发自定义数据类型。这与使用GiST具有非常相似的优点。

PostgreSQL中的GIN实现主要由 Teodor Sigaev 和 Oleg Bartunov 维护。有关GIN的更多信息,请访问他们的网站