Postgresql 中文操作指南

70.1. Introduction #

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

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

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

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

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

PostgreSQL 中的 GIN 实现主要由 Teodor Sigaev 和 Oleg Bartunov 维护。在他们的 website中有更多关于 GIN 的信息。