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

Quale MySQL Query è più veloce?

Dovresti sempre usare EXPLAIN per determinare come verrà eseguita la tua query.

Sfortunatamente, MySQL eseguirà la tua sottoquery come una QUERY DIPENDENTE, il che significa che la sottoquery verrà eseguita per ogni riga nella query esterna. Penseresti che MySQL sarebbe abbastanza intelligente da rilevare che la sottoquery non è una sottoquery correlata e da eseguirla solo una volta, purtroppo, non è ancora così intelligente.

Pertanto, MySQL eseguirà la scansione di tutte le righe degli studenti, eseguendo la sottoquery per ogni riga e non utilizzando alcun indice sulla query esterna.

Scrivere la query come JOIN consentirebbe a MySQL di utilizzare gli indici e la seguente query sarebbe il modo ottimale per scriverla:

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

Ciò utilizzerà i seguenti indici:

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