table: Animal
type: eq_ref
possible_keys: PRIMARY
key: PRIMARY
key_len: 2
ref: elevage7.Adoption.animal_id
rows: 1
Extra:
Pour la première étape, key, key_len et ref sont NULL. Aucun index n'est donc utilisé. type vaut ALL, ce qui est la valeur la
moins intéressante. Enfin, rows vaut 24, ce qui est le nombre de ligne dans la table Adoption. Toutes les lignes doivent être
parcourues pour trouver les lignes correspondant à la clause WHERE.
La deuxième étape par contre utilise bien un index (pour faire la jointure avec Animal).
En ajoutant un index sur Adoption.date_reservation, on peut améliorer les performances de cette requête.
Code : SQL
ALTER TABLE Adoption ADD INDEX ind_date_reservation
(date_reservation);
La même commande EXPLAIN donnera désormais le résultat suivant :
Code : SQL
*************************** 1. row ***************************
id: 1
select_type: SIMPLE
table: Adoption
type: range
possible_keys: ind_uni_animal_id,ind_date_reservation
key: ind_date_reservation
key_len: 3
ref: NULL
rows: 4
Extra: Using where
*************************** 2. row ***************************
id: 1
select_type: SIMPLE
table: Animal
type: eq_ref
possible_keys: PRIMARY
key: PRIMARY
key_len: 2
ref: elevage7.Adoption.animal_id
rows: 1
Extra:
La première étape utilise l'index, et ne doit donc plus parcourir toutes les lignes, mais seulement une partie (dont le nombre est
estimé à 4).
Attention de ne pas tomber dans l'excès en mettant des index partout. En général, on utilise EXPLAIN sur des requêtes
lourdes, dont on sait qu'elles ralentissent l'application. Il n'est pas nécessaire d'optimiser la moindre petite requête
SELECT.
Comparer le plan d'exécution de plusieurs requêtes
Partie 7 : Gestion des utilisateurs et configuration du serveur
401/414
www.openclassrooms.com
type: eq_ref
possible_keys: PRIMARY
key: PRIMARY
key_len: 2
ref: elevage7.Adoption.animal_id
rows: 1
Extra:
Pour la première étape, key, key_len et ref sont NULL. Aucun index n'est donc utilisé. type vaut ALL, ce qui est la valeur la
moins intéressante. Enfin, rows vaut 24, ce qui est le nombre de ligne dans la table Adoption. Toutes les lignes doivent être
parcourues pour trouver les lignes correspondant à la clause WHERE.
La deuxième étape par contre utilise bien un index (pour faire la jointure avec Animal).
En ajoutant un index sur Adoption.date_reservation, on peut améliorer les performances de cette requête.
Code : SQL
ALTER TABLE Adoption ADD INDEX ind_date_reservation
(date_reservation);
La même commande EXPLAIN donnera désormais le résultat suivant :
Code : SQL
*************************** 1. row ***************************
id: 1
select_type: SIMPLE
table: Adoption
type: range
possible_keys: ind_uni_animal_id,ind_date_reservation
key: ind_date_reservation
key_len: 3
ref: NULL
rows: 4
Extra: Using where
*************************** 2. row ***************************
id: 1
select_type: SIMPLE
table: Animal
type: eq_ref
possible_keys: PRIMARY
key: PRIMARY
key_len: 2
ref: elevage7.Adoption.animal_id
rows: 1
Extra:
La première étape utilise l'index, et ne doit donc plus parcourir toutes les lignes, mais seulement une partie (dont le nombre est
estimé à 4).
Attention de ne pas tomber dans l'excès en mettant des index partout. En général, on utilise EXPLAIN sur des requêtes
lourdes, dont on sait qu'elles ralentissent l'application. Il n'est pas nécessaire d'optimiser la moindre petite requête
SELECT.
Comparer le plan d'exécution de plusieurs requêtes
Partie 7 : Gestion des utilisateurs et configuration du serveur
401/414
www.openclassrooms.com
