我在 PostgreSQL 中使用 jsonb 类型。我经常进行以下类型的更新(jdocjsonb 列在哪里):
UPDATE my_table SET jdoc = jdoc || '{a: "Hello World!"}'::jsonb WHERE id = 123
Run Code Online (Sandbox Code Playgroud)
我在 jsonb 列上有许多表达式索引:
CREATE INDEX ix_b ON my_table some_function(jdoc->>b)
CREATE INDEX ix_c ON my_table some_other_function(jdoc->>c)
Run Code Online (Sandbox Code Playgroud)
如您所见,我只更改了jdoc->a,但我必须设置整个jdoc列。因此,我是否会因更新索引jdoc->b而遭受全部性能损失jdoc->c?或者 PostgreSQL 足够聪明以注意到这些值没有改变,因此索引不需要更新?如果我遭受了全部的性能损失,有没有办法避免它?