PostgreSQL JSONB GIN 索引多条件

PostgreSQL JSONB GIN Index multi condition

我使用的是 PostgreSQL 13,我有一个 table,它有一个 JSONB 列和 GIN 索引。

我的问题是为以下查询找到更好的方法。我有多个ID,有时我需要找到它们。

我的架构:

id  timestamp   data    
404599  2022-01-01 00:15:02.566 {"env": "worker", "id":1, "name": "foo", "lang": "en"}
404600  2022-01-01 00:15:02.685 {"env": "worker", "id":2, "name": "foo", "lang": "fr"}
404601  2022-01-01 00:15:02.808 {"env": "worker", "id":3, "name": "foo", "lang": "ru"}
404602  2022-01-01 00:15:03.023 {"env": "worker", "id":3, "name": "foo", "lang": "de"}
404603  2022-01-01 00:15:03.170 {"env": "worker", "id":4, "name": "foo", "lang": "tr"}

我的查询:

select * from foo where data @>  '{"id": 1}' or data @> '{"id": 2}' or data @> '{"id": 3}';

我想为“data”列使用 GIN 索引,但我找不到任何看起来像“in”运算符的更好方法。

这是在 JSON 列上使用 GIN 索引进行查询的最佳方式。

如果您的所有查询都是这样,使用 b-tree 索引会更有效:

CREATE INDEX ON foo ((data ->> 'id'));

SELECT * FROM foo WHERE data ->> 'id' IN (1, 2, 3);