架构:
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
相同。
答案 0 :(得分:1)
ANALYZE
(在任何特定情况下可能有帮助,也可能没有帮助);或使用INDEXED
子句强制使用特定索引(尽管documentation警告不要这样做):
SELECT ID FROM Groups INDEXED BY GroupTime WHERE ...
GroupTime
更有效。