Mysql
 sql >> Base de données >  >> RDS >> Mysql

Quelle requête MySQL est la plus rapide ?

Vous devez toujours utiliser EXPLAIN pour déterminer comment votre requête s'exécutera.

Malheureusement, MySQL exécutera votre sous-requête en tant que REQUÊTE DÉPENDANTE, ce qui signifie que la sous-requête sera exécutée pour chaque ligne de la requête externe. On pourrait penser que MySQL serait assez intelligent pour détecter que la sous-requête n'est pas une sous-requête corrélée et ne l'exécuterait qu'une seule fois, hélas, ce n'est pas encore si intelligent.

Ainsi, MySQL analysera toutes les lignes des étudiants, exécutant la sous-requête pour chaque ligne et n'utilisant aucun index sur la requête externe.

Écrire la requête en tant que JOIN permettrait à MySQL d'utiliser des index, et la requête suivante serait la meilleure façon de l'écrire :

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

Cela utiliserait les index suivants :

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