Code-Garage #117 - Qu'est-ce qu'une vue en SQL ?
Durée: 7m58s
Date de sortie: 24/02/2025
Une vue est une "projection" des données, sous une nouvelle structure, et calculée à chaque requête. Mais quels sont les avantages et les inconvénients de créer une vue en SQL ? C'est ce que nous allons voir ensemble.
Notes de l'épisode :
- Cours complet pour maîtriser le SQL : https://code-garage.com/courses/sql-mysql
- Episode NoSQL vs SQL : https://code-garage.com/podcast/classic/episode-92
- Les procédures stockées : https://code-garage.com/podcast/classic/episode-109
Salut et bienvenue dans ce nouvel épisode du podcast de Code Garage, je m'appelle Nicolas
Brandin-Bernard et aujourd'hui on va aborder un sujet qui est un sujet assez basique,
assez simple mais en même temps qui est vraiment important à savoir quand on parle de SQL
et donc de base de données relationnelle et ce sujet ce sont les vues.
En fait une vue c'est une table virtuelle avec un select, une sélection de colonne
à partir d'une ou plusieurs tables déjà existantes.
Alors à quoi est-ce que ça va servir ? On va utiliser des vues dans une base de données
dans en général deux cas principaux, soit parce qu'on a besoin régulièrement, quand
on va créer une vue c'est qu'on va avoir besoin souvent d'informations spécifiques,
soit parce que c'est des colonnes qu'on va venir générer, créer, ça va être de la
concatenation des sommes, des additions, des choses comme ça, donc de l'agrégation
de données et dont on va avoir besoin très souvent ou alors simplement parce qu'on a
des tables avec des relations et pareil dont on va avoir très souvent besoin.
Alors je vous donne un exemple assez simple, c'est par exemple si on a, on va dire, une
table avec des livres et puis une table avec des auteurs, à chaque fois on va prendre
un modèle simplifié ou un livre à un seul auteur de référencé, et bien très souvent,
dès qu'on va vouloir afficher un livre à quelqu'un, et bien on va vouloir afficher
le titre du livre, l'année à laquelle il a été écrit, mais aussi le nom de l'auteur,
le prénom de l'auteur, éventuellement la nationalité de l'auteur, enfin voilà on
a quelques informations donc qu'on va toujours vouloir en fait récupérer pour l'afficher
au final. Ça c'est un excellent exemple d'une vue où on va avoir simplement une jointure,
peut-être une deuxième jointure avec d'autres informations importantes sur le livre,
mais voilà et qu'on va utiliser dans la majorité de nos requêtes, que ce soit des requêtes,
pardon pour filtrer des livres, paginer, rechercher, peu importe, en fait on va toujours vouloir
avoir un petit peu toutes ces informations là, comme une projection, c'est aussi comme ça,
parfois qu'on peut appeler les vues, ce sont des projections des données dont on va avoir
régulièrement besoin. Alors maintenant vous savez un petit peu pourquoi et quand est-ce qu'on
crée des vues, on va parler un petit peu de performance et de choses comme ça. Il faut savoir,
la première chose c'est qu'une vue elle est recalculée à chaque fois qu'elle est appelée,
qu'elle est utilisée, donc alors on peut parfois avoir un petit peu peur en termes de performance,
on peut se dire ça va être quelque chose qui est super lourd, en réalité non,
au pire du pire une vue ça va avoir la même performance qu'une sous requête, vous allez
pouvoir, c'est comme si vous créez, créez, on va dire ça, une sous requête et puis que vous
fassiez une projection avec un select sur cette sous requête, on va avoir au pire les mêmes
performances. Maintenant il y a plusieurs choses que ça permet de faire dans la majorité des
DSGBD, eh bien déjà ça va nous permettre comme la vue va être stockée sur notre base de données
puis qu'on va l'utiliser régulièrement, ça va être un point de référence sur laquelle se
baser pour par exemple créer des index, pour améliorer les performances non pas seulement de
notre table on va dire de base mais également des vues qui sont liées à nos tables, ça c'est
la première chose. La deuxième chose c'est que certains sgbd vont faire évidemment des caches
et des optimisations sur ces vues là puisqu'ils savent comme les vues sont enregistrées en base
de données, ils savent quels vues existent et donc potentiellement lesquels il va falloir,
enfin comment optimiser au mieux les requêtes et évidemment le cache. Mais il y a aussi une
dernière chose, alors là c'est pas disponible sur tous les sgbd mais c'est disponible sur certains
comme Postgres, SQL Server et de mémoire je crois Oracle, c'est ce qu'on va appeler des
materialized view, pour le coup ces vues là ne sont pas recalculées, ce sont des vues qui sont
stockées comme le serait une table classique, les résultats vont être stockés et donc pour
venir mettre à jour les données qui sont dans cette vue il va falloir le faire manuellement,
demander un refresh tout simplement de ces vues materialisées. Alors c'est quand même important
de noter il y a deux cas un peu particuliers où une vue peut être légèrement moins performante
qu'une requête on va dire classique, c'est la première si jamais dans la vue on ajoute un
order by puisque du coup ça va être plus compliqué pour le sgbd d'effectuer certaines
optimisations donc voilà si vous avez des order by dans une vue ça peut faire baisser les performances
et la deuxième chose c'est s'il y a des jointures complexes et du coup le planificateur en ce qui va
on va dire orchestrer et ordonner lesquels données vont être récupérées en première lors d'une
requête et bien si jamais il y a des jointures trop complexes le planificateur peut avoir des
problèmes pour optimiser la requête mais ça peut arriver aussi sur des sous-roquettes ou d'autres
choses. Dernière petite chose c'est évidemment si vous faites énormément de jointures vous avez
une vue avec je sais pas on va dire 5, 6, 10 jointures et quand en réalité ces jointures là vous
les utilisez que pour 5 à 10 % de vos requêtes bon bah là forcément ces jointures vont être
exécutées avant de récupérer vos données et ces données seront inutiles parce que vous ne les
récupérez pas donc vous allez perdre de la performance. Il faut quand même faire attention
quand vous créez vos vues à bien savoir quand est-ce qu'elles vont être utilisées, à quelle
fréquence et surtout quelles sont les données dont vous allez vraiment avoir besoin. La dernière
chose c'est est-ce qu'il est possible de faire un insert ou un update ou même un delete sur
une vue et bien en réalité c'est possible, c'est possible mais à certaines conditions. On va
parler de vue modifiable et en fait une vue elle est modifiable si il respecte certains critères.
La première c'est si la vue est basée sur une seule table ok donc pas de jointures complexes,
pas d'agrégation comme des sums, des counts, average etc. également si elle n'utilise pas de
distinctes et si on a parlé d'agrégation, si elle n'utilise pas group by or having mais également
des sous requêtes complexes même si on fait une sous requête sur la même table et bien ça va
empêcher la modification mais si jamais vous respectez on va dire tous ces critères et bien
oui vous pourrez faire un insert into et mettre votre vue ici. Je ne dis pas que c'est forcément
très utile mais il est possible de le faire, je trouve que c'est intéressant de le savoir quand
même. J'espère que cet épisode vous aura plu, que vous en aurez appris un petit peu plus sur les
vues, il y a de fortes chances que vous connaissiez déjà ou vous en ayez déjà entendu parler mais
là au moins vous avez un petit peu plus d'infos et de détails. Alors avant de vous laisser je tiens
quand même à vous rappeler qu'on a déjà fait d'autres épisodes sur le sujet des bases données
et du SQL notamment les procédures stockées on a fait aussi la différence entre SQL,
no SQL et même le fonctionnement des index. Évidemment je vous mettrai tous les liens
directement dans les notes de l'épisode mais je tiens à vous rappeler aussi qu'on a un cours
complet sur les bases SQL et main SQL 8. Pareil je vous mettrai le lien directement dans les
descriptions pour avoir accès à la plateforme et n'hésitez pas à laisser évidemment cinq
étoiles sur votre plateforme d'écoute de podcast que ce soit 10 heures Spotify, Apple podcast,
peu importe. Moi je vous donne rendez-vous la semaine prochaine pour un prochain épisode du
podcast mais avant vous pouvez retrouver tous les épisodes du podcast tous les articles de
blog et surtout tous les cours gratuits et les cours payant également sur code-garage.fr et non
petite surprise désormais la plateforme vous la trouverez sous l'URL code-garage.com bon évidemment
le point fr marche toujours mais ce petit changement et bien annonce de belle chose en 2025 je vous en
dis pas plus mais je vous donne rendez-vous la semaine prochaine passez une bonne semaine salut
Episode suivant:
Les infos glanées
Code-Garage
Découvrons ensemble des sujets passionnants autour du métier de dev et de la programmation en général !
Tags