Выполнение 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 имеет индекс)
Спасибо,