为了账号安全,请及时绑定邮箱和手机立即绑定

在JSON数组中查找元素的索引

在JSON数组中查找元素的索引

手掌心 2019-07-02 10:02:11
在JSON数组中查找元素的索引我有张桌子看起来像这样:CREATE TABLE tracks (id SERIAL, artists JSON);INSERT INTO tracks (id, artists)    VALUES (1, '[{"name": "blink-182"}]');INSERT INTO tracks (id, artists)    VALUES (2, '[{"name": "The Dirty Heads"}, {"name": "Louis Richards"}]');还有几个专栏与这个问题无关。将它们作为JSON存储是有原因的。我想要做的是查找一条轨道,它有一个特定的艺人名称(完全匹配)。我使用这个查询:SELECT * FROM tracks    WHERE 'ARTIST NAME' IN     (SELECT value->>'name' FROM json_array_elements(artists))例如SELECT * FROM tracks  WHERE 'The Dirty Heads' IN      (SELECT value->>'name' FROM json_array_elements(artists))然而,这做了一个完整的表格扫描,它不是很快。我尝试使用函数创建GIN索引names_as_array(artists),并使用'ARTIST NAME' = ANY names_as_array(artists)但是,没有使用索引,而且查询实际上要慢得多。
查看完整描述

3 回答

?
catspeake

TA贡献1111条经验 获得超0个赞

这不起作用,因为返回SETOF不能在索引中使用。除去这些,我可以创建索引,但是查询计划器没有使用它。另外,json_Array_元素和Array_agg都是IMMUTABLE

查看完整回答
反对 回复 2019-07-02
  • 3 回答
  • 0 关注
  • 2707 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信