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

Který dotaz MySQL je rychlejší?

Vždy byste měli používat EXPLAIN určit, jak bude dotaz probíhat.

Bohužel MySQL provede váš poddotaz jako DEPENDENT QUERY, což znamená, že poddotaz bude spuštěn pro každý řádek ve vnějším dotazu. Mysleli byste si, že MySQL by bylo dostatečně chytré na to, aby zjistilo, že poddotaz není korelovaný poddotaz, a spustilo by ho jen jednou, bohužel, ještě to tak chytré není.

MySQL tedy prohledá všechny řádky ve studentech, spustí poddotaz pro každý řádek a nepoužije žádné indexy na vnějším dotazu.

Zápis dotazu jako JOIN by umožnil MySQL využívat indexy a následující dotaz by byl optimální způsob, jak jej napsat:

SELECT COUNT(*) AS count
FROMstudents s
JOIN classes c
  ON c.id = s.classes_id
  AND c.departments_id = 1
WHERE s.status = 1

To by využilo následující indexy:

students(`status`)
classes(`id`, `departements_id`) : multi-column index


  1. AKTUALIZUJTE pomocí OBJEDNÁVKY BY

  2. Mysql server na MAMP se nespustí

  3. Rozdíl mezi GiST a GIN indexem

  4. Jak vytvořit funkci připojení mysqli?