I have the following query: SELECT Relations.IDSecondDatum,Games.Result FROM Games,Relations,Classifications WHERE (Games.BlackID=?1)AND (Relations.TypeFirstDatum==2)AND (Relations.IDFirstDatum=Games.ID)AND (Relations.TypeSecondDatum=3)AND (Relations.IDSecondDatum=Classifications.ID)AND (Classifications.System=?4)AND (Classifications.GameType=?5); (Games.ID equivalent to Games.rowid, Classifications.ID equivalent to Classifications.rowid) And these indices on the Relations table: CREATE INDEX Relations_Index1 ON Relations (IDFirstDatum,IDSecondDatum,TypeFirstDatum,TypeSecondDatum); CREATE INDEX Relations_Index2 ON Relations (TypeFirstDatum,TypeSecondDatum,IDFirstDatum,IDSecondDatum); CREATE INDEX Relations_Index3 ON Relations (IDSecondDatum,IDFirstDatum,TypeSecondDatum,TypeFirstDatum); CREATE INDEX Relations_Index4 ON Relations (TypeSecondDatum,TypeFirstDatum,IDSecondDatum,IDFirstDatum); The stats for the indices are: Relations|Relations_Index4|80965 80965 80965 40 1 Relations|Relations_Index3|80965 40 1 1 1 Relations|Relations_Index2|80965 80965 80965 1 1 Relations|Relations_Index1|80965 1 1 1 1 Why does the query planner like to use Relations_Index2? QUERY PLAN |--SEARCH TABLE Games USING COVERING INDEX Games_Index2 (BlackID=?) |--SEARCH TABLE Relations USING COVERING INDEX Relations_Index2 (TypeFirstDatum=? AND TypeSecondDatum=? AND IDFirstDatum=?) `--SEARCH TABLE Classifications USING INTEGER PRIMARY KEY (rowid=?) Is Relations_Index1 not the most efficient one?