0
CREATE TABLE [Groups] ([Group] VARCHAR(50) NULL, [ArtNum] INTEGER NULL, [ID] VARCHAR(50) NULL, [Time] INTEGER);
CREATE INDEX [GroupTime] ON [Groups] ([Group], [Time] DESC);
CREATE INDEX [GroupArtNum] ON [Groups] ([Group], [ArtNum]);
我想優化以下查詢:
SELECT `ID` FROM `Groups` WHERE `Group`=? ORDER BY `Time` DESC LIMIT 1
的問題是,SQLite的關於使用GroupArtNum
指數,而不是GroupTime
指數的堅持。 EXPLAIN QUERY PLAN
打印以下內容:
SEARCH TABLE Groups USING INDEX GroupArtNum (Group=?) (~10 rows)
USE TEMP B-TREE FOR ORDER BY
有趣的是,如果我試圖通過ArtNum
,而不是Time
排序,它運行速度很快。
我在Time
列中只有(64位)整數,與ArtNum
相同。
您是否嘗試過運行['ANALYZE'](http://www.sqlite.org/lang_analyze.html)? –
如果'ANALYZE'沒有解決這個問題,將'Time'放入查詢*應該會欺騙它。像這樣:WHERE Group =? AND時間> = 0'。然而,可能有更多優雅的解決方案。 –
ANALYZE工作,謝謝!請轉貼爲答案,以便我可以接受它:) –