【发布时间】:2020-06-10 13:38:20
【问题描述】:
我在表中的 jsonb 列上创建以下索引:
CREATE INDEX idx_gin_accounts ON t1 USING GIN (accounts jsonb_path_ops);
CREATE INDEX idx_gin_stocks ON t1 USING GIN (stocks jsonb_path_ops);
CREATE INDEX idx_gin_stocks_value ON t1 USING GIN ((stocks-> 'value'));
CREATE INDEX idx_gin_stocks_type ON t1 USING GIN ((stocks-> 'type'));
我的查询是这样的:
SELECT
t.accounts ->> 'name' as account_name
//other columns
FROM t1 t
left join lateral jsonb_array_elements(t.accounts) a(accounts)
on 1 = 1 and a.accounts @> '{"role": "ADVISOR"}'
left join lateral jsonb_array_elements(t1.stocks) s(stocks)
on 1 = 1 and s.stocks @> '{"type": "RIC"}'
WHERE (s.stocks -> 'value' ? 'XXX')
当我使用EXPLAIN ANALYSE 进行分析时,我没有看到查询计划中使用了这些索引。
应该创建不同的索引吗?或者我怎样才能使用这些来加快搜索速度?
说当我在 where 条件下传入(s.stocks-> 'value' ? 'XXX') 时,我希望搜索是最优的?
【问题讨论】:
-
“说当我传入 (s.stocks-> 'value' ? 'XXX') 在 where 条件下”如果这是你想要做的,那么这就是你的例子应该显示的。
-
外连接表上的
where子句将外连接重新变为内连接
标签: sql postgresql query-performance jsonb database-indexes