0Pricing
SQL Academy · Leçon

Vues matérialisées et stratégies de REFRESH

Conservez le résultat d’une requête coûteuse avec MATERIALIZED VIEW et actualisez-le selon un calendrier ou à la demande.

Vues matérialisées et stratégies de REFRESH est une leçon SQL Academy gratuite sur CoddyKit. Ceci est la leçon 3 sur 4. Tu peux lire la leçon complète ci-dessous gratuitement — puis la pratiquer en direct dans le navigateur avec un éditeur de code intégré et un tuteur IA 24/7. Elle fait partie du parcours d'apprentissage SQL Academy, et ta progression se synchronise sur le web et l'application CoddyKit. Le cours SQL Academy comprend 4 leçons au total.

Vue matérialisée = résultat enregistré

Contrairement à une vue ordinaire, une vue matérialisée stocke sur disque le résultat de son SELECT. Les requêtes accèdent aux données stockées — rapidement. Actualisez-la à la demande.

CREATE MATERIALIZED VIEW daily_revenue AS
SELECT date_trunc('day', created_at) AS day,
       SUM(total) AS revenue
FROM orders
GROUP BY 1;

Interrogation

Les requêtes sont simplement des SELECT sur les données matérialisées :

SELECT * FROM daily_revenue WHERE day >= NOW() - INTERVAL '30 days';

REFRESH MATERIALIZED VIEW

Recalculez le résultat. La vue est verrouillée exclusivement :

REFRESH MATERIALIZED VIEW daily_revenue;
-- Selects on the view block during refresh.

REFRESH MATERIALIZED VIEW CONCURRENTLY

Actualisation non bloquante — les lecteurs continuent d’utiliser les anciennes données jusqu’à ce que les nouvelles soient prêtes. Nécessite un index UNIQUE sur la vue :

CREATE UNIQUE INDEX ON daily_revenue (day);

REFRESH MATERIALIZED VIEW CONCURRENTLY daily_revenue;

Index sur les vues matérialisées

Vous pouvez indexer une vue matérialisée comme n’importe quelle table — cela accélère les requêtes :

CREATE INDEX daily_revenue_day_idx ON daily_revenue (day DESC);

Quand matérialiser

Utilisez des vues matérialisées lorsque :

  • La requête sous-jacente est coûteuse
  • Le résultat peut être légèrement obsolète
  • La requête s’exécute de nombreuses fois entre deux mises à jour

Actualisation planifiée

Aucun planificateur intégré. Utilisez pg_cron, une tâche cron du système d’exploitation ou le planificateur de votre application :

-- Via pg_cron extension:
SELECT cron.schedule('refresh_daily', '0 1 * * *', 'REFRESH MATERIALIZED VIEW CONCURRENTLY daily_revenue;');

Actualisation incrémentielle

PostgreSQL ne dispose d’aucune actualisation incrémentielle native — chaque REFRESH recalcule le résultat depuis zéro. Pour une agrégation incrémentielle, examinez :

  • Les tables récapitulatives gérées par des déclencheurs
  • Les agrégations continues de TimescaleDB
  • L’extension pg_ivm (vues matérialisées incrémentielles)

Lire les tables sous-jacentes sans affecter les lectures

Une actualisation CONCURRENT lit les tables sous-jacentes dans l’instantané d’une transaction — elle ne les bloque pas. Toutefois, l’actualisation elle-même peut être lente sur des volumes de données énormes.

Utilisation du disque

Une vue matérialisée double l’espace de stockage de ses données. Prévoyez suffisamment d’espace disque.

Combiner avec le partitionnement

Pour les séries temporelles volumineuses, partitionnez la vue matérialisée (ou utilisez TimescaleDB) :

CREATE MATERIALIZED VIEW orders_summary AS ... ;
CREATE INDEX ON orders_summary (day);
-- For very large views, consider regular table + manual upsert pattern.

Quand ne pas l’utiliser

Si vos lectures acceptent des données fraîches obtenues par SQL et que la requête sous-jacente est déjà rapide, évitez la maintenance liée aux actualisations. Les vues matérialisées impliquent un compromis : obsolescence contre rapidité.

Récapitulatif

Les vues matérialisées mémorisent les résultats des requêtes.

  • Stockées sur disque, indexées et rapides
  • REFRESH manuel ou planifié
  • CONCURRENTLY nécessite un index UNIQUE
  • À utiliser pour les agrégations coûteuses et légèrement obsolètes

Vérification rapide

Qu’exige REFRESH MATERIALIZED VIEW CONCURRENTLY contrairement à l’actualisation de base ?

Questions Fréquemment Posées

La leçon « Vues matérialisées et stratégies de REFRESH » est-elle gratuite ?

Oui — le texte complet de « Vues matérialisées et stratégies de REFRESH » est gratuit à lire ici sur le web. Pour la pratiquer de manière interactive (un éditeur de code intégré et un tuteur IA 24/7) et déverrouiller le reste du cours SQL Academy, passe à CoddyKit PRO. Le cours SQL Academy comprend 4 leçons au total.

Qu'est-ce que j'apprendrai dans « Vues matérialisées et stratégies de REFRESH » ?

Conservez le résultat d’une requête coûteuse avec MATERIALIZED VIEW et actualisez-le selon un calendrier ou à la demande. Tu pratiques SQL Academy avec du code pratique que tu exécutes directement dans le navigateur, et un tuteur IA 24/7 répond à tes questions au fur et à mesure que tu avances dans la leçon.

Dois-je avoir de l'expérience pour commencer SQL Academy ?

Aucune expérience préalable n'est requise. SQL Academy sur CoddyKit est structuré pour les débutants jusqu'aux apprenants avancés, donc tu peux commencer ici ou depuis le début et avancer à ton rythme. Ceci est la leçon 3 sur 4.

Combien de temps prend la leçon « Vues matérialisées et stratégies de REFRESH » ?

La plupart des leçons CoddyKit prennent environ 5–10 minutes. Chacune est courte et interactive, tu progresses régulièrement et tu repiques exactement où tu t'es arrêté sur le web et l'app.

Peux-tu écrire et exécuter du code dans cette leçon SQL Academy ?

Oui. Chaque leçon SQL Academy inclut un éditeur de code intégré, tu écris et exécutes du vrai code directement dans ton navigateur et tu reçois des retours IA instantanés — aucune configuration locale requise.

Toutes les leçons de ce cours

  1. Vues simples : réutilisation logique
  2. Vues modifiables et déclencheurs INSTEAD OF
  3. Vues matérialisées et stratégies de REFRESH
  4. Quand précalculer les agrégats
← Retour à SQL Academy