Devmind.
Menu

Apprendre, à votre rythme

Tous les cursus sont accessibles sans compte.

Chapitre 1 / Notion

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.

◷ 11 minutesTravail sur votre machine

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, ou CONCURRENTLY sans 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.
  • REFRESH sans CONCURRENTLY : 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.