我有一個包含大約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