Sql 在jsonb数组对象(和索引)中查询jsonb数组对象
您好,这个查询需要永远的时间(2-3分钟),我如何编写它,这样我就不必两次执行jsonb_数组_元素了!? 有没有办法在数组内部的数组中为“pid”字段编制索引 提前感谢可用于从jsonb列中搜索顶级键的键或键/值对 我试图重新编写您的查询以使其更具可读性。没有任何样本数据,很难验证,但与原始数据相比,它的性能如何?(我将Sql 在jsonb数组对象(和索引)中查询jsonb数组对象,sql,postgresql,jsonb,Sql,Postgresql,Jsonb,您好,这个查询需要永远的时间(2-3分钟),我如何编写它,这样我就不必两次执行jsonb_数组_元素了!? 有没有办法在数组内部的数组中为“pid”字段编制索引 提前感谢可用于从jsonb列中搜索顶级键的键或键/值对 我试图重新编写您的查询以使其更具可读性。没有任何样本数据,很难验证,但与原始数据相比,它的性能如何?(我将jsonb_数组_元素((b->>b')::jsonb)更改为jsonb_数组_元素(bets->'b'),该元素应该已经是json而没有强制转换。) 对于索引部分,您可以尝试
jsonb_数组_元素((b->>b')::jsonb)
更改为jsonb_数组_元素(bets->'b')
,该元素应该已经是json而没有强制转换。)
对于索引部分,您可以尝试以下方法
select
picks ->> 'pid' as playerid, e.id,
e.sportid, e.leagueid,
e.islive, e.status,
e.locationid, e.participants, em.bets
From
sfbr.eventmarket em
join sfbr.events e on em.eventid = e.id,
jsonb_array_elements(em.bets) b,
jsonb_array_elements((b->> 'b')::jsonb) picks
where (picks ->> 'pid') is not null
and (picks ->> 'ec') is null
and e.startdatetime > '2019-09-04 07:29:00.690834' and (picks ->> 'pid') in
('1880686','1796512','1838464','851658','66675')
order by e.startdatetime desc;
with m as (
select
eventid,
bets,
jsonb_array_elements(bets -> 'b') as picks
from
sfbr.eventmarket
), em as (
select
eventid,
bets,
picks ->> 'pid' as pid,
picks ->> 'ec' as ec
from
m
), e as (
select
id,
sportid,
leagueid,
islive,
status,
locationid,
participants,
startdatetime
from
sfbr.events
)
select
em.pid,
e.*,
em.bets
from
em
inner join
e on em.eventid = e.id
where
em.pid is not null and
em.ec is null and
e.startdatetime > '2019-09-04 07:29:00.690834' and
em.pid in ('1880686','1796512','1838464','851658','66675')
order by
e.startdatetime desc;