在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
IMMUTABLE
添加回答
举报
0/150
提交
取消