[英]Is GIN index on postgres jsonb column nested?
我有一個json,我將它存儲為postgres中的jsonb。
{
"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 :
jsonb的默認GIN運算符類支持使用頂級鍵存在運算符?,?&和?|的查詢 運算符和路徑/值存在運算符@>。
對於包含@>
它適用於嵌套值。 對於其他運算符,它僅適用於頂級鍵或表達式索引中使用的任何級別。 此外,根據文檔,使用要查詢的級別上的表達式索引將比整列上的簡單索引更快(因為大小更小而有意義)。
如果您只進行包含搜索,請考慮在構建索引時使用jsonb_path_ops
。 它更小更快。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.