【发布时间】:2017-09-11 18:47:59
【问题描述】:
这是我的json
jsondata
------------------------------------
{"key1": 1, "keyset": [10, 20, 30]}
{"key1": 1, "keyset": [10, 20]}
{"key1": 1, "keyset": [30]}
{"key1": 1 }
{"key1": 1, "key2": 1}
我尝试为上述示例创建索引keyset
使用 btree 的第一个索引
CREATE INDEX test_keyset ON test_table (jsondata->'keyset');
使用 gin 的第二个索引
CREATE INDEX test_keyset ON test_table USING GIN(jsondata->'keyset');
并查询选择keyset值10,
SELECT jsondata
FROM test
JOIN LATERAL jsonb_array_elements_text(jsondata->'keyset') a(v)
ON TRUE
WHERE a.v::integer = 10;
但它正在执行顺序扫描(检查所有行),谁能建议我哪种索引方法是正确的(btree 或 gin)以及使用索引从 json 获取数据的有效方法,例如,我是 postgres 的新手
【问题讨论】:
-
也许这会有所帮助:stackoverflow.com/a/18405706/3270427
标签: json postgresql indexing