我有一个包含大约500K行的表。该表在“状态”列中有一个索引。于是我运行下面的命令解释:SQLite ANALYZE中断索引
EXPLAIN QUERY PLAN SELECT * FROM my_table WHERE status = 'ACTIVE'
结果在可预见的“说明” ......
SEARCH TABLE my_table USING INDEX IDX_my_table_status (status=?) (~10 rows)
后许多额外的行添加到表中,我称之为“分析”。随后,查询似乎要慢得多,所以我重新运行我的解释,现在看到以下内容:
SCAN TABLE my_table (~6033 rows)
我注意到的第一件事是,无论是行估计的路要走。最大的问题是,一旦ANALYZE运行,该指数似乎会被跳过。我尝试了REINDEX - 无济于事。我能够得到索引的唯一方法是放弃它们,然后重新创建它们。有没有人看过这个?这是一个错误?任何想法我做错了什么?我已经在多个数据库上试过了,我看到了相同的结果。这是在我的电脑上,在MAC和iPhone/iPad上 - 都是一样的结果。
我添加了order by子句,它确实强制使用索引。感谢这两个答案 - 都帮了很大忙。 – Brandon