全部术语

GIN 索引

PostgreSQL 中的 GIN 索引是什么?

GIN(通用倒排)索引将值内部的每个元素(例如数组元素、JSONB 键或文本搜索中的词)映射到包含该元素的行。

GIN 是 Generalized Inverted Index(通用倒排索引)的缩写。它专为复合值而设计,即每个被索引的条目包含多个元素,并适用于查找包含特定元素的条目的查询。典型用途包括数组、jsonb 和全文搜索。

使用默认的操作符类时,GIN 对数组支持 @>(包含)和 &&(重叠)等操作符,对 jsonb 支持 @> 以及键存在操作符。查找速度很快,但插入和更新的开销比 B-tree 更大。fastupdate 存储参数默认开启,它会把新条目缓冲在待处理列表中,以减轻这部分开销。

示例

该示例用 GIN 为一个 text[] 列建立索引,并让 EXPLAIN 分析 tags 中包含 t42 的行。输出显示 Bitmap Index Scan on docs_tags_gin。

CREATE TABLE docs (id int PRIMARY KEY, tags text[]);
INSERT INTO docs
SELECT g, ARRAY['t' || (g % 100), 'u' || (g % 7)] FROM generate_series(1, 100000) AS g;
CREATE INDEX docs_tags_gin ON docs USING gin (tags);
ANALYZE docs;

EXPLAIN SELECT id FROM docs WHERE tags @> ARRAY['t42'];

适用于原生 PostgreSQL 16 或 17 的纯 SQL,无需任何扩展。请在一个可随时丢弃的空数据库中运行。

参考资料

PostgreSQL 官方文档(英文)。

相关术语