SQLite Forum

Usage of suboptimum index
Login
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?