表达式索引(JSON_EXTRACT)未使用

时间:2019-05-10 11:40:29

标签: sqlite database-indexes

我很难让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...

关于如何纠正此问题的任何想法?

2 个答案:

答案 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(=?)搜索表测试