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?
leagueidwouldn't hurt. And marking my answer as correct neither ;-)