如何提高大 table 中对 JSONB 字段的 "minus" 查询的性能?

How to improve performance of "minus" query on JSONB field in big table?

在 PostgreSQL 12.7 数据库中,我 table 有一个 JSONB 字段。 Table 有百万行。 table1 就像:

id    | value
--    | --------------------------------------
1     | {"1001": "coke", "1002": "soda"}
2     | {"2001": "fanta", "1001": "coke"}
3     | {"3001": "beer", "2001": "fanta"}

每当我需要删除项目 1001 时,我有这样的查询:

查询 1:

UPDATE table1 set value = value - '1001'

查询 2:

UPDATE table1 set value = value - '1001' WHERE value ? '1001'

查询 2 大约需要 2 秒,查询 1 大约需要 20 秒。我正在寻找提高四分之一秒更新速度的方法。

支持带索引的查询2。喜欢:

CREATE INDEX ON table1 USING gin (value);

default GIN operator class for jsonb 支持 ? 运算符。

虽然只有很少行受到影响,但应该非常有效。如果更改了所有行的主要百分比,索引将无济于事(实际上会增加成本)。