gpt4 book ai didi

postgresql - postgres jsonb 列上的 GIN 索引是否嵌套?

转载 作者:行者123 更新时间:2023-11-29 11:33:17 33 4
gpt4 key购买 nike

我有一个 json,我将它作为 jsonb 存储在 postgres 中。

{
"name": "Mr. Json",
"dept":{
"team":{
"aliases":["a1","a2","a3"],
"team_name": "xyz"
},
"type":"engineering",
"lead":"Mr. L"
},
"hobbies": ["Badminton", "Chess"],
"is_active": true
}

已经在列上创建了 GIN 索引

我需要执行精确匹配查询,例如所有包含 type='engineering' 和 lead='Mr. L'。我目前正在执行包含查询,例如:

data @> '{"dept":{"type":"engineering"}}' and data @> '{"dept":{"lead":"Mr. L"}}'

我看到显示正在使用 GIN 索引的查询计划,但我不确定这是否有效,或者是否有更好的方法来实现这一点。

我是否必须在嵌套键上构建另一个索引?

索引 jsonb 列是索引嵌套键还是仅索引顶级键?

也请分享一些关于此的好资源。

最佳答案

来自 docs :

The default GIN operator class for jsonb supports queries with top-level key-exists operators ?, ?& and ?| operators and path/value-exists operator @>.

对于包含 @>,它使用嵌套值。对于其他运算符,它仅适用于顶级键或表达式索引中使用的任何级别。此外,根据文档,在要查询的级别上使用表达式索引比在整个列上使用简单索引更快(因为大小更小才有意义)。

如果您只进行包含搜索,请考虑在构建索引时使用 jsonb_path_ops。它更小更快。

关于postgresql - postgres jsonb 列上的 GIN 索引是否嵌套?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44326458/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com