【发布时间】:2019-04-10 06:21:43
【问题描述】:
目前,我正在编写针对超过 800 万行的 JSONB 表的查询。如何以最有效的方式查询parent 和friends 对象?
查询(Postgres 9.6):
select distinct id, data->>'_id' jsonID, data->>'email' email, friends->>'name' friend_name, parent->>'name' parent
from temp t
CROSS JOIN jsonb_array_elements(t.data->'friends') friends
CROSS JOIN jsonb_array_elements(friends->'parent') parent
where friends ->> 'name' = 'Chan Franco'
and parent->>'name' = 'Hannah Golden'
示例 DDL(带数据):https://pastebin.com/byN7uyKx
【问题讨论】:
-
请将所有定义信息放入您的问题中。您的 Postgres 版本、表定义、示例值。 (冗长的测试用例可以留在外部站点 - 像 dbfiddle.uk 或 sqlfiddle.com 这样的小提琴站点会更适合这个。)
-
一种更有效的方法是标准化您的模型。 blog.2ndquadrant.com/…
-
感谢您的回复,我将寻求规范化此数据模型!
标签: arrays postgresql database-design jsonb postgresql-performance