Vues matérialisées
Pour le dernier chapitre de cette partie, nous allons parler des vues matérialisées. Comme leur nom l'indique, les vues
matérialisées sont des vues, dont les données sont matérialisées, c'est-à-dire stockées.
Les vues matérialisées sont des objets assez utiles, permettant un gain de performance relativement important lorsqu'ils sont
bien utilisés. Malheureusement, MySQL n'implémente pas les vues matérialisées en tant que telles.
Cependant, en utilisant les moyens du bord (c'est-à-dire les objets et concepts disponibles avec MySQL), il est tout à fait
possible de construire des vues matérialisées soi-même.
Voyons donc quel est le principe de ces vues matérialisées, ce qu'on peut gagner à les utiliser, et comment les construire et les
mettre à jour.
Principe
Vues - rappels et performance
Une vue, c'est tout simplement une requête SELECT à laquelle on donne un nom. Lorsque l'on sélectionne des données à partir
d'une vue, on exécute en réalité la requête SQL de la vue. Par conséquent, les vues ne permettent pas de gagner en performance.
En fait, dans certains cas, les requêtes sur des vues peuvent même être moins rapides que si l'on fait directement la requête sur la
(ou les) table(s).
Les vues peuvent en effet utiliser deux algorithmes différents :
MERGE : les clauses de la requête sur la vue (WHERE, ORDER BY,…) sont fusionnées à la requête définissant la vue ;
TEMPTABLE : une table temporaire est créée avec les résultats de la requête définissant la vue, et la requête de sélection
sur la vue est ensuite exécutée sur cette table temporaire.
Avec l'algorithme MERGE, tout se passe comme si l'on exécutait la requête directement sur les tables contenant les données. On
perd un petit peu de temps à fusionner les clauses des deux requêtes, mais c'est négligeable.
Par contre, avec TEMPTABLE, non seulement on exécute deux requêtes (une pour créer la vue temporaire, l'autre sur cette
dernière), mais en plus la table temporaire ne possède aucun index, contrairement aux tables normales. Une recherche dans la
table temporaire peut donc prendre plus de temps que la même recherche sur une table normale, pour peu que cette dernière
possède des index.
Enfin, n'oublions pas que MySQL nécessite l'utilisation de l'algorithme TEMPTABLE pour les vues contenant au moins un des
éléments suivants :
DISTINCT ;
LIMIT ;
une fonction d'agrégation (SUM(), COUNT(), MAX(), etc.) ;
GROUP BY ;
HAVING ;
UNION ;
une sous-requête dans la clause SELECT.
Vues matérialisées
Il fallait donc quelque chose qui combine les avantages des vues et les avantages des tables normales : c'est ainsi que le concept
des vues matérialisées est né !
Une vue matérialisée est un objet qui permet de stocker le résultat d'une requête SELECT. Là où une vue se contente de
stocker la requête, la vue matérialisée va stocker directement les résultats (elle va donc les matérialiser), plutôt que la requête.
Lorsque l'on fait une requête sur une vue matérialisée, on va donc chercher directement des données dans celle-ci, sans passer
par les tables d'origine et/ou une table temporaire intermédiaire.
"Vraies" vues matérialisées
Certains SGBD (Oracle par exemple) permettent de créer directement des vues matérialisées, avec des outils et des options
dédiés. Il suffit alors de créer les vues matérialisées que l'on désire et de les paramétrer correctement, et tout se fait
automatiquement.
Partie 6 : Au-delà des tables classiques : vues, tables temporaires et vues matérialisées
366/414
www.openclassrooms.com
Précédent

- 366/413

Suivant