スキーマ:
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
GroupArtNum
問題は、SQLiteがインデックスの代わりにインデックスを使用することを主張していること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
。