除非清理,否则sqlite3 DB不使用索引

时间:2019-01-31 15:02:39

标签: indexing sqlite vacuum

在数据库上执行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

如何确定为什么在真空操作之前不使用索引?

我也有解释结果,但是我不确定它们是否有用。它们显然是不同的(原始的非真空结果执行了倒带/循环,而真空DB OpenRead的索引就是该值)

谢谢

0 个答案:

没有答案