Vues et vues matérialisées
La même requête complexe copiée dans 5 endpoints = 5 endroits à maintenir + 5 façons de diverger.
Prérequis : cours précédents (jointures, CTE).
Pourquoi
La même requête complexe copiée dans 5 endpoints = 5 endroits à maintenir + 5 façons de diverger. Les vues centralisent la logique de lecture ; les matérialisées ajoutent la vitesse.
Concepts
- Vue : requête enregistrée, interrogée comme une table. Zéro duplication, toujours fraîche — mais recalculée à chaque appel (pas de magie perf).
- Vue matérialisée : résultat stocké +
REFRESH(complet, ouCONCURRENTLYsans verrou). Lecture ultra-rapide, données d'il y a X (fraîcheur assumée et documentée !). - Règle : vue pour factoriser, matérialisée pour accélérer ce qui est cher ET tolérablement périmé (dashboard, reporting).
Exemple
CREATE MATERIALIZED VIEW mv_ca_mensuel AS
SELECT date_trunc('month', created_at) AS mois, SUM(total) AS ca
FROM orders GROUP BY 1;
-- Refresh programmé (timer/cron) :
REFRESH MATERIALIZED VIEW CONCURRENTLY mv_ca_mensuel;
Cas réel
Dashboard qui joint 6 tables à chaque chargement (4 s, base saturée à 50 users) : vue matérialisée refresh toutes les 5 min → 30 ms. Personne n'a besoin du CA « à la seconde » sur un dashboard.
Pièges
- Matérialisée jamais refresh : données fossiles servies avec aplomb. Refresh programmé + monitoring de sa fraîcheur.
REFRESHsansCONCURRENTLY: verrou exclusif, lecteurs bloqués — sur grosse vue = indisponibilité.- Logique métier critique dans une vue que personne ne versionne : les vues aussi vivent en migrations !
À retenir
Vue = factoriser, matérialisée = accélérer le tolérablement périmé ; refresh programmé + CONCURRENTLY.
Pas de correction en ligneConfrontez votre code aux résultats attendus du cours.