Postgres 11中有表格:
_order
-----------
id
items: jsonb: [{'id': 1},{'id': 5}...]
property
-----------
item_id
value
我们需要获取已设置property.value
的每个订单的订单清单,其中包含每个订单的商品阵列。
我使用这样的查询:
select
_order.*,
jsonb_agg(distinct property.value) filter (where property.value is not null) as listed_items
from _order
left join jsonb_array_elements(items) jae on true
left join property on ((jae->'id')::int = property.id)
group by _order.id
_order.id, property.item_id - primary keys
对于真实数据(每8k订购500个项目,总计约400万行),查询工作太慢-大约25秒。
在_order.items
上添加GIN索引后,查询开始工作15秒钟,但速度却很慢。
问题:如何从jsonb中为数组id
建立索引?我发现如何才能做到这一点,而不是数组。
也许您对如何优化货币数据库架构的查询有任何想法?