Erreur SQL, quel dommage !

Erreur SQL, quel dommage !

Erreur SQL, quel dommage !

Qu'est-ce qu'une vue ?
 

Qu'est-ce qu'une vue ?

Décembre 2012

Dans une base de données MySQL, les données sont stockées dans des tables. Ensuite on peut combiner plusieurs tables dans des requêtes SQL (grâce aux jointures) pour en extraire les données qui nous intéressent.

Mais il y a d'autres sources de données que les tables : les vues.

Une vue est tout simplement une sorte de table virtuelle qui ne contient en réalité que le résultat d'une requête SQL que vous avez défini lors de la création de la vue.

Une vue présente plusieurs intérêts :

  • Elle permet d'apporter une couche d'abstraction au modèle physique de données
  • Une vue s'utilise exactement comme une table dans les requêtes SQL, cela facilite donc l'écriture des requêtes
  • Une vue est plus optimisée qu'une requête SQL, car MySQL n'a pas à interpréter la requête SQL à chaque fois, il en conserver une version "précompilée" qui accélère énormément le traitement

Comment créer une vue dans MySQL ?

Pour créer une vue, on utilise normalement une requête SQL avec la clause CREATE VIEW (comme le CREATE TABLE pour les tables).

Sauf qu'il existe de nombreux outils d'administrations pour MySQL, comme phpMyAdmin ou HeidiSQL, donc je vous conseille d'utiliser ces logiciels pour gérer vos vues, c'est beaucoup plus simple et user-friendly.

Vous aurez alors à remplir un formulaire avec le nom de la vue, la requête SQL qui va retourner les résultats de la vue, et diverses options :

Vue MySQL 5 - HeidiSQL

Mais ça n'est pas tout, il faut aussi choisir quel algorithme utiliser. Il y en a deux : MERGE vs TEMPTABLE.

MERGE est l'algorithme le plus simple et le plus performant. Il permet de fusionner le statement de la vue avec la requête SQL qui l'utilise, ainsi il n'y a pas de construction de table temporaire qui dégradent les temps de réponse.

TEMPTABLE fonctionne de manière totalement différente. Comme son nom l'indique, MySQL créé une table temporaire en mémoire, et c'est cette table qui devient la source des données dans la requête SQL qui utilise la vue.

Et les tables temporaires, c'est très mauvais pour le performances.

Alors comment choisir entre MERGE et TEMPTABLE ?

C'est très simple : utilisez toujours MERGE, sauf quand votre vue comporte une clause d'agrégation (comme DISTINCT, GROUP BY, ORDER BY ou HAVING), dans ce dernier cas vous serez obligé d'utiliser TEMPTABLE, çà ne fonctionne pas avec MERGE.

On peut aussi définir le comportement lors de la mise à jour des données : CASCADED (qui répercute les modifications sur la vue), et LOCAL, qui ne modifie que la table.

Différence entre vue et vue matérialisée

Comme on vient de le voir, une vue n'est que le résultat d'une requête SQL. Du coup, à chaque fois que vous faites appel à une vue dans une de vos requêtes, MySQL va devoir exécuter (de manière transparence pour vous) la requête correspondante à la vue, pour récupérer les résultats en ainsi construire une table virtuelle.

Allez donc jeter un oeil sur cette page : excel sur mac.

Ce mécanisme implique des pertes de performances par rapport à une table ou les données sont physiquement stockées sur le disque.

Pour apporter une solution à ce problème, on a inventé les vues matérialisées qui consistent tout simplement à stocker les vues dans des fichiers, exactement comme les tables.

Du coup on augmente certes la charge du serveur en écriture (puisqu'il faut mettre à jour non seulement les tables, mais aussi les vues qui dépendent des tables mises à jour), mais en contrepartie on obtient des lectures très rapides, aussi rapide qu'une table.

Les vues et les index

Il y a une chose qu'il faut savoir à propos des vues : elles ne sont pas indexées.

Ceci est particulièrement vrai pour les tables temporaires (utilisées par les vues utilisant l'algorithme TEMPTABLE).

Du coup interroger une table temporaire est beaucoup plus lent que d'interroger une table correctement indexée.

C'est un facteur à prendre en compte lorsqu'on choisit d'utiliser une vue. D'un côté ça simplifie les requêtes, de l'autre ça ralentit le serveur, c'est un compromis.

Vous trouverez plus d'infos sur mysqlperformanceblog.com (LE site d'autorité concernant MySQL).

Encore faim ? allez lire ça : dessiner un gâteau !

0 commentaire
facultatif
Facebook Twitter RSS Email
Forum Excel
Venez découvrir le nouveau forum excel question/réponse à la stackoverflow.com !
Forum Excel
hit parade n'en a rien a foutre du W3C Positionnement et Statistiques Gratuites Vincent Paré