Индекс по выражению (JSON_EXTRACT) не используется - PullRequest
0 голосов
/ 10 мая 2019

У меня проблемы с получением 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....

Есть мысли о том, как я могу это исправить?

1 Ответ

0 голосов
/ 10 мая 2019

Оказывается, что индекс не используется, если я пытаюсь SELECT его.

Я должен использовать выражение JSON_EXTRACT() в предложении WHERE или ORDER BY.Если я это сделаю, все будет работать нормально.

EXPLAIN QUERY PLAN SELECT * FROM test WHERE JSON_EXTRACT(tags, '$.someKey')="asdf";

ПОИСК ТАБЛИЦЫ test ИСПОЛЬЗОВАНИЕ INDEX test_idx (=?)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...