Mysql
 sql >> Base de données >  >> RDS >> Mysql

Pourquoi ma requête multi-colonnes est-elle considérablement plus lente que les requêtes mono-colonne correspondantes, même avec un index multi-colonnes ?

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' 
          )