
Une vue est une requête enregistrée qui se ré-exécute à chaque appel (toujours à jour, aucun stockage) ; une vue matérialisée stocke physiquement le résultat (lecture ultra-rapide, mais à rafraîchir). Le choix se résume à un arbitrage : fraîcheur des données contre performance. Voici la comparaison détaillée.
Tableau comparatif
| Vue (VIEW) | Vue matérialisée (MATERIALIZED VIEW) | |
|---|---|---|
| Stockage des données | ❌ aucun (requête seulement) | ✅ résultat stocké sur disque |
| Fraîcheur | Toujours à jour | Datée du dernier rafraîchissement |
| Vitesse de lecture | = coût de la requête | Très rapide (pré-calculé) |
| Rafraîchissement | Inutile | Manuel ou automatique |
| Usage type | Simplifier/sécuriser l’accès | Reporting, agrégats lourds |
La vue : une requête réutilisable
CREATE VIEW v_clients_actifs AS
SELECT id, nom, ville FROM clients WHERE actif = 'O';
SELECT * FROM v_clients_actifs; -- ré-exécute la requête sous-jacenteLa vue ne stocke rien : elle est toujours à jour car elle interroge les tables en direct. Idéale pour simplifier des requêtes complexes ou restreindre l’accès à certaines colonnes/lignes. Détails dans notre tutoriel VIEW Oracle.
La vue matérialisée : un résultat pré-calculé
CREATE MATERIALIZED VIEW mv_ca_mensuel
REFRESH COMPLETE ON DEMAND
AS
SELECT TRUNC(date_vente,'MM') AS mois, SUM(montant) AS ca
FROM ventes GROUP BY TRUNC(date_vente,'MM');
SELECT * FROM mv_ca_mensuel; -- lit le résultat déjà calculé (rapide)Le résultat est stocké : la lecture est quasi instantanée, parfaite pour un tableau de bord qui agrège des millions de lignes. Le prix à payer : les données reflètent le dernier rafraîchissement. Voir MATERIALIZED VIEW Oracle.
Rafraîchir une vue matérialisée
-- manuel
EXEC DBMS_MVIEW.REFRESH('MV_CA_MENSUEL');
-- automatique toutes les heures
CREATE MATERIALIZED VIEW mv_ca_mensuel
REFRESH COMPLETE START WITH SYSDATE NEXT SYSDATE + 1/24
AS SELECT ...;Modes : COMPLETE (recalcul total) ou FAST (incrémental, nécessite un materialized view log). ON COMMIT rafraîchit dès qu’une transaction modifie les tables sources.
Quand choisir quoi ?
- Données qui doivent être en temps réel (transactionnel) → vue.
- Agrégats lourds consultés souvent, fraîcheur de quelques minutes/heures acceptable → vue matérialisée.
- Simplifier ou sécuriser une requête (sans enjeu de perf) → vue.
FAQ
Une vue stocke-t-elle des données ?
Non : une vue classique ne stocke que la définition de la requête. Seule la vue matérialisée stocke physiquement le résultat.
La vue matérialisée se met-elle à jour automatiquement ?
Seulement si vous le configurez (ON COMMIT, START WITH/NEXT, ou un job). Sinon, ses données restent figées jusqu’au prochain rafraîchissement.
Une vue ralentit-elle les requêtes ?
Une vue n’ajoute pas de coût en soi : elle exécute sa requête sous-jacente. Si celle-ci est lente, la vue l’est aussi — d’où l’intérêt de la vue matérialisée pour les gros agrégats.
