我很难让SQLite为表达式建立索引。具体来说,我想在JSON对象中的特定属性上创建索引。
CREATE TABLE test (tags JSON);
INSERT INTO test VALUES(JSON_OBJECT('someKey', 'someValue'));
CREATE INDEX test_idx ON test(JSON_EXTRACT(tags, '$.someKey'));
EXPLAIN QUERY PLAN SELECT JSON_EXTRACT(tags, '$.someKey') FROM test;
此查询计划说:
扫描表测试
我期望的是某种SEARCH TABLE test USING INDEX...
。
关于如何纠正此问题的任何想法?
答案 0 :(得分:1)
Index 是一个平衡树,用于定位和排序。表达式不需要定位或排序,除非在 WHERE 或 ORDER BY 子句中
答案 1 :(得分:0)
事实证明,如果我尝试SELECT
则不使用索引。
我必须在JSON_EXTRACT()
或WHERE
子句中使用ORDER BY
表达式。如果我这样做,那就很好。
EXPLAIN QUERY PLAN SELECT * FROM test WHERE JSON_EXTRACT(tags, '$.someKey')="asdf";
使用INDEX test_idx(=?)搜索表测试