我有一个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