簡體   English   中英

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

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM