58.1. 介绍

GIN的意思是通用倒排索引(Generalized Inverted Index)。 GIN被设计用于这样一种情况:被索引项是组合值, 而被索引处理的查询需要搜索出现在这些组合值中的元素值。 比如,项目可能是文档,查询可以是搜索包含多个特定单词的文档。

我们使用项目这个词指代被索引的组合值,指代一个元素值。 GIN本身总是存储和搜索键,而不是项目值。

GIN索引存储一系列(key, posting list)对, 这里的posting list是一组出现键的行ID。 每一个被索引的项目都可能包含多个键,因此同一个行ID可能会出现在多个posting list中。 每个键值只被存储一次,因此在相同的键出现在很多项目的情况下,GIN索引是非常紧凑的。

GIN索引之所以是通用的,是因为GIN 访问方法不需要了解它所加速的操作。 取而代之的是,它使用为特殊数据类型定义的定制策略。 策略定义了如何从被索引项目和查询条件中抽出键,以及如何决定包含了查询中一些键的一行是否确实满足查询条件。

GIN的一个优点是它允许由领域专家而不是由数据库专家来 开发附带适当的访问方法的自定义数据类型。 这一点与使用GiST很相似。

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