sql >> Database teknologi >  >> RDS >> Mysql

Hvorfor er min forespørgsel med flere kolonner dramatisk langsommere end de tilsvarende forespørgsler med en enkelt kolonne, selv med et indeks med flere kolonner?

Har du oprettet et indeks stop_id, departure_time ? Fordi departure_time, stop_id vil absolut intet gøre.

Dette er en virkelig hård en - den har alle mulige dårlige ting til at håndtere indekser :(

Du har en rækkevidde, en OR og en ikke sammenhængende IN - det bliver ikke værre end det.

Prøv stop_id, departure_time og hvis det ikke hjælper, så er der ikke meget du kan gøre end at skifte til PostgreSQL.

Du kan også prøve at omskrive forespørgslen som:

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

eller:

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


  1. Sådan opretter du en blog i PHP og MySQL database - Admin Posts

  2. ClusterControl CMON HA for distribueret database høj tilgængelighed - del 2 (GUI-adgangsopsætning)

  3. Hvordan lader man en bruger indsætte hvor som helst på en liste?

  4. PHP - Brug af PDO med IN-klausularray