我有一個9.4 Postgres數據庫,其中有一個包含jsonb
字段的表。使用Postgres在json數組內部索引對象元素
的JSON的結構類似於這樣:
{
name: 'customer1',
age: 28,
products: [{
name: 'product1',
price: 100
}, {
name: 'product2',
price: 200
}]
}
下面的查詢返回上述JSON就好:
SELECT jdoc
FROM customers, jsonb_array_elements(jdoc->'products') as products
WHERE (products->>'price')::numeric > 150
的問題是性能受到了不少在更大的數據庫。
我可以使用什麼索引來加速此查詢?
我已經試過遠:
GIN
指數(包括jsonb_ops
和jsonb_path_ops
)。但他們似乎只在@>
這樣的存在運營商上工作。CREATE INDEX ON persons(((jsonb_array_elements(jdoc->'products')->>'price')::numeric))
。哪給我給我數據類型不匹配錯誤。- 請注意,
CREATE INDEX ON persons(((jdoc->'age')::numeric))
的作品,並允許我快速查詢(jdoc->>'age')::numeric < 30
。
- 請注意,
使用關係數據模型而不是JSON。 – Abelisto