БД sqlite3 не использует индекс, если пылесосить - PullRequest
0 голосов
/ 31 января 2019

Выполнение VACUUM на моей БД значительно повышает производительность запросов.Пытаясь выяснить, почему это так, я обнаружил, что sqlite3 не использует индекс в БД в исходном состоянии, а просто общий SEARCH TABLE.

QUERY PLAN
|--SCAN TABLE data    <--- no Index
|--USE TEMP B-TREE FOR GROUP BY
`--USE TEMP B-TREE FOR ORDER BY

После выполнения VACUUM в QUERY PLAN отображаетсяПОИСК ПОЛЬЗОВАТЕЛЬСКОГО ИНДЕКСА как следует

    QUERY PLAN
|--SEARCH TABLE data USING INDEX index_name (name=?)
|--USE TEMP B-TREE FOR GROUP BY
`--USE TEMP B-TREE FOR ORDER BY

Как определить, почему индекс не используется до операции вакуумирования?

У меня также есть результаты объяснения, но я не уверен, что они будут полезны.Они явно отличаются (оригинальный, невакуумный результат выполняет Rewind / Loop, где вакуумный БД OpenRead имеет индекс)

Спасибо,

...