FROM Adoption
INNER JOIN Animal ON Animal.id = Adoption.animal_id
INNER JOIN Espece ON Animal.espece_id = Espece.id
GROUP BY annee, Espece.id;
END
DEFINER: sdz@localhost
SECURITY_TYPE: DEFINER
Déroulement d'une requête de sélection
On a vu comment obtenir des informations sur les objets de nos bases de données, voyons maintenant comment obtenir des
informations sur les requêtes que l'on exécute sur nos bases de données.
Plus particulièrement, nous allons nous attarder sur la commande EXPLAIN, qui permet de décortiquer l'exécution d'une requête
SELECT. Grâce à cette commande, il est possible de savoir quelles tables et quels index sont utilisés, et dans quel ordre.
L'utilisation de cette commande est extrêmement simple : il suffit d'ajouter EXPLAIN devant la requête SELECT que l'on désire
examiner.
Exemple
Code : SQL
EXPLAIN SELECT Animal.nom, Espece.nom_courant AS espece, Race.nom AS
race
FROM Animal
INNER JOIN Espece ON Animal.espece_id = Espece.id
LEFT JOIN Race ON Animal.race_id = Race.id
WHERE Animal.id = 37;
id select_type table
type
possible_keys
key
key_len ref rows Extra
1 SIMPLE
Animal const PRIMARY,fk_espece_id PRIMARY 2
const 1
1 SIMPLE
Espece const PRIMARY
PRIMARY 2
const 1
1 SIMPLE
Race
const PRIMARY
PRIMARY 2
const 1
id : cette colonne identifie la requête SELECT concernée par l'étape. Ici, il n'y en a qu'une, mais dans le cas d'une requête
avec des sous-requêtes, ou avec un UNION, il peut y avoir plusieurs requêtes SELECT différentes.
select_type : le type de la requête SELECT concernée par l'étape.
Type
Explication
SIMPLE
Un simple SELECT, sans sous-requête ou UNION.
PRIMARY
SELECT extérieur, c'est-à-dire le premier, le principal SELECT (en présence de sous-requêtes
ou UNION).
UNION
Seconde requête SELECT d'un UNION (et requêtes suivantes).
DEPENDENT UNION
Comme UNION, mais requête dépendant d'une requête SELECT externe (à cause d'une sousrequête corrélée par exemple).
UNION RESULT
Résultat d'une UNION.
SUBQUERY
Première requête SELECT d'une sous-requête.
DEPEDENT
SUBQUERY
Première requête SELECT d'une sous-requête, dépendant d'une requête externe.
DERIVED
Table dérivée (résultat d'une sous-requête).
UNCACHEABLE
Sous-requête dont le résultat ne peut être mis en cache et doit donc être réévalué pour chaque
Partie 7 : Gestion des utilisateurs et configuration du serveur
399/414
www.openclassrooms.com
INNER JOIN Animal ON Animal.id = Adoption.animal_id
INNER JOIN Espece ON Animal.espece_id = Espece.id
GROUP BY annee, Espece.id;
END
DEFINER: sdz@localhost
SECURITY_TYPE: DEFINER
Déroulement d'une requête de sélection
On a vu comment obtenir des informations sur les objets de nos bases de données, voyons maintenant comment obtenir des
informations sur les requêtes que l'on exécute sur nos bases de données.
Plus particulièrement, nous allons nous attarder sur la commande EXPLAIN, qui permet de décortiquer l'exécution d'une requête
SELECT. Grâce à cette commande, il est possible de savoir quelles tables et quels index sont utilisés, et dans quel ordre.
L'utilisation de cette commande est extrêmement simple : il suffit d'ajouter EXPLAIN devant la requête SELECT que l'on désire
examiner.
Exemple
Code : SQL
EXPLAIN SELECT Animal.nom, Espece.nom_courant AS espece, Race.nom AS
race
FROM Animal
INNER JOIN Espece ON Animal.espece_id = Espece.id
LEFT JOIN Race ON Animal.race_id = Race.id
WHERE Animal.id = 37;
id select_type table
type
possible_keys
key
key_len ref rows Extra
1 SIMPLE
Animal const PRIMARY,fk_espece_id PRIMARY 2
const 1
1 SIMPLE
Espece const PRIMARY
PRIMARY 2
const 1
1 SIMPLE
Race
const PRIMARY
PRIMARY 2
const 1
id : cette colonne identifie la requête SELECT concernée par l'étape. Ici, il n'y en a qu'une, mais dans le cas d'une requête
avec des sous-requêtes, ou avec un UNION, il peut y avoir plusieurs requêtes SELECT différentes.
select_type : le type de la requête SELECT concernée par l'étape.
Type
Explication
SIMPLE
Un simple SELECT, sans sous-requête ou UNION.
PRIMARY
SELECT extérieur, c'est-à-dire le premier, le principal SELECT (en présence de sous-requêtes
ou UNION).
UNION
Seconde requête SELECT d'un UNION (et requêtes suivantes).
DEPENDENT UNION
Comme UNION, mais requête dépendant d'une requête SELECT externe (à cause d'une sousrequête corrélée par exemple).
UNION RESULT
Résultat d'une UNION.
SUBQUERY
Première requête SELECT d'une sous-requête.
DEPEDENT
SUBQUERY
Première requête SELECT d'une sous-requête, dépendant d'une requête externe.
DERIVED
Table dérivée (résultat d'une sous-requête).
UNCACHEABLE
Sous-requête dont le résultat ne peut être mis en cache et doit donc être réévalué pour chaque
Partie 7 : Gestion des utilisateurs et configuration du serveur
399/414
www.openclassrooms.com
