Everywhere I look it is explained that I should create a table index in situations like this:
SELECT * FROM foo, bar WHERE foo.field1 < <some_value>;
However my situation is different.
I am using SQLite and have the following schema:
CREATE TABLE leagues(
id integer primary key,
...
);
CREATE TABLE players(
playerid integer,
id integer,
type integer,
value double,
PRIMARY KEY(playerid,id)
);
CREATE TABLE scoretype(
scoreid integer primary key,
scorename varchar(50)
);
CREATE TABLE leaguescoretype(
playerid integer,
id integer,
scoreid integer,
value double,
foreign key(playerid) references players(playerid),
foreign key(id) references leagues(id),
foreign key(scoreid) references scoretype(scoreid)
);
and I want to run following query:
SELECT
players.playerid,
scoretype.scorename,
leaguescoretype.value
FROM players,scoretype,leaguescoretype
WHERE scoretype.scoreid = leaguescoretype.scoreid
AND players.playerid = leaguescoretype.playerid
AND players.playerid = 1 AND players.id = 1;
Trying to run this query under EXPLAIN QUERY PLAN I am getting:
SCAN TABLE leaguescoretype (~1000000 rows)
SEARCH TABLE players USING COVERING INDEX sqlite_autoindex_players(id=? AND playerid=?) (~1 rows)
SEARCH TABLE scoretype USING INTEGER PRIMARY KEY (rowid=?) (~1 rows)
Is there a way to improve the performance of this query?