🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
# 57.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的更多信息可以访问他们的 [网站](http://www.sai.msu.su/~megera/wiki/Gin)。