未使用表达式索引 (JSON_EXTRACT)
Index on expression (JSON_EXTRACT) not used
我在让 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;
这个查询计划说:
SCAN TABLE test
我期待的是某种 SEARCH TABLE test USING INDEX...
。
关于如何更正此问题的任何想法?
事实证明,如果我尝试 SELECT
索引并没有被使用。
我必须在 WHERE
或 ORDER BY
子句中使用 JSON_EXTRACT()
表达式。如果我这样做,效果很好。
EXPLAIN QUERY PLAN SELECT * FROM test WHERE JSON_EXTRACT(tags, '$.someKey')="asdf";
SEARCH TABLE test USING INDEX test_idx (=?)
Index是一棵平衡树,用于定位和排序。除非在 WHERE 或 ORDER BY 子句
中,否则表达式不需要定位或排序
我在让 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;
这个查询计划说:
SCAN TABLE test
我期待的是某种 SEARCH TABLE test USING INDEX...
。
关于如何更正此问题的任何想法?
事实证明,如果我尝试 SELECT
索引并没有被使用。
我必须在 WHERE
或 ORDER BY
子句中使用 JSON_EXTRACT()
表达式。如果我这样做,效果很好。
EXPLAIN QUERY PLAN SELECT * FROM test WHERE JSON_EXTRACT(tags, '$.someKey')="asdf";
SEARCH TABLE test USING INDEX test_idx (=?)
Index是一棵平衡树,用于定位和排序。除非在 WHERE 或 ORDER BY 子句
中,否则表达式不需要定位或排序