sql >> Databáze >  >> RDS >> Mysql

Proč je můj dotaz s více sloupci dramaticky pomalejší než odpovídající dotazy s jedním sloupcem, a to i s indexem s více sloupci?

Vytvořili jste index stop_id, departure_time ? Protože departure_time, stop_id neudělá vůbec nic.

Toto je skutečně tvrdý - má všechny možné špatné věci pro práci s indexy :(

Máte rozsah, OR a nesouvislý IN – nezhorší se to.

Zkuste stop_id, departure_time a pokud to nepomůže, pak nemůžete udělat nic jiného, ​​než přejít na PostgreSQL.

Můžete také zkusit přepsat dotaz jako:

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

nebo:

    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. Jak SUBSTRING_INDEX() funguje v MariaDB

  2. Jak NOT RLIKE funguje v MariaDB

  3. Alternativa k částečnému (neagregovaný sloupec) ve skupině podle [Ollivander's Inventory problem on hackerrank]

  4. SQL Division pomocí 'neexistuje' v mysql