Avez-vous créé un index stop_id, departure_time
? Parce que departure_time, stop_id
ne fera absolument rien.
C'est un vraiment dur - il a toutes les mauvaises choses possibles pour gérer les index :(
Vous avez une plage, un OR et un IN non contigu - il n'y a pas pire que ça.
Essayez stop_id, departure_time
et si cela ne vous aide pas, vous ne pouvez rien faire d'autre que de passer à PostgreSQL.
Vous pouvez également essayer de réécrire la requête comme :
SELECT *
from stop_times
WHERE ( stop_times.stop_id IN(51511,51509,51508,51510,6,53851,51522,51533)
AND departure_time BETWEEN '02:41' AND '05:41'
)
OR ( stop_times.stop_id IN(51511,51509,51508,51510,6,53851,51522,51533)
AND departure_time BETWEEN '26:41' AND '29:41'
)
ou :
SELECT *
from stop_times
WHERE ( stop_times.stop_id IN(51511,51509,51508,51510,6,53851,51522,51533)
AND departure_time BETWEEN '02:41' AND '05:41'
)
UNION ALL
SELECT *
from stop_times
WHERE ( stop_times.stop_id IN(51511,51509,51508,51510,6,53851,51522,51533)
AND departure_time BETWEEN '26:41' AND '29:41'
)