MySQL va fusionner les deux requêtes, et exécuter ceci :
Code : SQL
SELECT nom, date_naissance
FROM Animal
WHERE espece_id = 1
AND pere_id IS NOT NULL;
TEMPTABLE
L'algorithme TEMPTABLE, par contre, crée une table temporaire contenant les résultats de la requête définissant la vue puis,
par la suite, exécute la requête de sélection sur cette table temporaire.
Donc, si l'on exécute la requête suivante sur la vue V_Chien :
Code : SQL
SELECT nom, date_naissance
FROM V_Chien
WHERE pere_id IS NOT NULL;
Avec l'algorithme TEMPTABLE, la requête définissant la vue va être exécutée et ses résultats stockés dans une table temporaire.
Code : SQL
SELECT id, sexe, date_naissance, nom, commentaires, espece_id,
race_id, mere_id, pere_id, disponible
FROM Animal
WHERE espece_id = 1;
Ensuite, sur cette table temporaire, va être exécutée la requête finale :
Code : SQL
SELECT nom, date_naissance
FROM table_temporaire
WHERE pere_id IS NOT NULL;
Algorithme par défaut et conditions
Il existe une troisième option possible pour la clause ALGORITHM dans la requête de création des vues : UNDEFINED.
Par défaut, si on ne précise pas d'algorithme pour la vue, c'est l'option UNDEFINED qui est utilisée. Cette option laisse MySQL
décider lui-même de l'algorithme qu'il appliquera.
Si c'est possible, MERGE sera utilisé, car cet algorithme est plus performant que TEMPTABLE. Cependant, toutes les vues ne
peuvent pas utiliser l'algorithme MERGE. En effet, une vue utilisant un ou plusieurs des éléments suivants ne pourra pas utiliser
MERGE :
DISTINCT ;
LIMIT ;
une fonction d'agrégation (SUM(), COUNT(), MAX(), etc.) ;
GROUP BY ;
HAVING ;
Partie 6 : Au-delà des tables classiques : vues, tables temporaires et vues matérialisées
344/414
www.openclassrooms.com
Code : SQL
SELECT nom, date_naissance
FROM Animal
WHERE espece_id = 1
AND pere_id IS NOT NULL;
TEMPTABLE
L'algorithme TEMPTABLE, par contre, crée une table temporaire contenant les résultats de la requête définissant la vue puis,
par la suite, exécute la requête de sélection sur cette table temporaire.
Donc, si l'on exécute la requête suivante sur la vue V_Chien :
Code : SQL
SELECT nom, date_naissance
FROM V_Chien
WHERE pere_id IS NOT NULL;
Avec l'algorithme TEMPTABLE, la requête définissant la vue va être exécutée et ses résultats stockés dans une table temporaire.
Code : SQL
SELECT id, sexe, date_naissance, nom, commentaires, espece_id,
race_id, mere_id, pere_id, disponible
FROM Animal
WHERE espece_id = 1;
Ensuite, sur cette table temporaire, va être exécutée la requête finale :
Code : SQL
SELECT nom, date_naissance
FROM table_temporaire
WHERE pere_id IS NOT NULL;
Algorithme par défaut et conditions
Il existe une troisième option possible pour la clause ALGORITHM dans la requête de création des vues : UNDEFINED.
Par défaut, si on ne précise pas d'algorithme pour la vue, c'est l'option UNDEFINED qui est utilisée. Cette option laisse MySQL
décider lui-même de l'algorithme qu'il appliquera.
Si c'est possible, MERGE sera utilisé, car cet algorithme est plus performant que TEMPTABLE. Cependant, toutes les vues ne
peuvent pas utiliser l'algorithme MERGE. En effet, une vue utilisant un ou plusieurs des éléments suivants ne pourra pas utiliser
MERGE :
DISTINCT ;
LIMIT ;
une fonction d'agrégation (SUM(), COUNT(), MAX(), etc.) ;
GROUP BY ;
HAVING ;
Partie 6 : Au-delà des tables classiques : vues, tables temporaires et vues matérialisées
344/414
www.openclassrooms.com
