Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Warum ist meine mehrspaltige Abfrage dramatisch langsamer als die entsprechenden einspaltigen Abfragen, selbst mit einem mehrspaltigen Index?

Haben Sie einen Index stop_id, departure_time erstellt? ? Denn departure_time, stop_id wird absolut nichts tun.

Das ist wirklich schwer - es hat alle möglichen Nachteile für den Umgang mit Indizes :(

Sie haben einen Bereich, ein OR und ein nicht zusammenhängendes IN - es wird nicht schlimmer.

Versuchen Sie es mit stop_id, departure_time und wenn es nicht hilft, können Sie nicht viel tun, außer zu PostgreSQL zu wechseln.

Sie können auch versuchen, die Abfrage wie folgt umzuschreiben:

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

oder:

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