0Pricing
SQL Academy · Lektion

Materialisierte Views und REFRESH-Strategien

Speichern Sie das Ergebnis einer aufwendigen Abfrage mit MATERIALIZED VIEW dauerhaft und aktualisieren Sie es nach Zeitplan oder bei Bedarf.

Materialisierte Views und REFRESH-Strategien ist eine kostenlose SQL Academy-Lektion auf CoddyKit. Dies ist Lektion 3 von 4. Du kannst die komplette Lektion unten kostenlos lesen – dann übst du sie direkt im Browser mit einem integrierten Code-Editor und einem KI-Tutor rund um die Uhr. Sie ist Teil des SQL Academy-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der SQL Academy-Kurs umfasst insgesamt 4 Lektionen.

Materialisierte View = gespeichertes Ergebnis

Im Gegensatz zu einer normalen View speichert eine materialisierte View das Ergebnis ihres SELECT auf der Festplatte. Abfragen greifen auf die gespeicherten Daten zu – schnell. Die Aktualisierung erfolgt bei Bedarf.

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

Abfragen

Abfragen sind einfach SELECTs auf den materialisierten Daten:

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

REFRESH MATERIALIZED VIEW

Berechnet das Ergebnis neu. Sperrt die View exklusiv:

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

REFRESH MATERIALIZED VIEW CONCURRENTLY

Nicht blockierende Aktualisierung – Leser erhalten weiterhin die alten Daten, bis die neuen bereitstehen. Erfordert einen eindeutigen Index für die View:

CREATE UNIQUE INDEX ON daily_revenue (day);

REFRESH MATERIALIZED VIEW CONCURRENTLY daily_revenue;

Indizes für materialisierte Views

Sie können eine materialisierte View wie jede Tabelle indizieren – das beschleunigt Abfragen:

CREATE INDEX daily_revenue_day_idx ON daily_revenue (day DESC);

Wann Sie materialisieren sollten

Verwenden Sie materialisierte Views, wenn:

  • die zugrunde liegende Abfrage aufwendig ist
  • das Ergebnis geringfügig veraltet sein darf
  • die Abfrage zwischen Aktualisierungen häufig ausgeführt wird

Geplante Aktualisierung

Es gibt keinen integrierten Scheduler. Verwenden Sie pg_cron, einen Cron-Job des Betriebssystems oder den Scheduler Ihrer Anwendung:

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

Inkrementelle Aktualisierung

PostgreSQL bietet keine native inkrementelle Aktualisierung – jedes REFRESH berechnet das Ergebnis vollständig neu. Für inkrementelle Aggregationen sollten Sie Folgendes in Betracht ziehen:

  • selbst entwickelte triggerbasierte „Zusammenfassungstabellen“
  • kontinuierliche Aggregationen von TimescaleDB
  • die Erweiterung pg_ivm (inkrementelle Materialized Views)

Zugrunde liegende Tabellen lesen, ohne Lesevorgänge zu beeinflussen

Eine CONCURRENT-Aktualisierung liest die zugrunde liegenden Tabellen in einem Transaktions-Snapshot – sie blockiert diese nicht. Bei sehr großen Datenmengen kann die Aktualisierung selbst jedoch langsam sein.

Festplattennutzung

Eine materialisierte View verdoppelt den Speicherbedarf ihrer Daten. Planen Sie den Festplattenspeicher entsprechend.

Mit Partitionierung kombinieren

Partitionieren Sie bei sehr großen Zeitreihen die materialisierte View (oder verwenden Sie TimescaleDB):

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

Wann Sie sie nicht verwenden sollten

Wenn Ihre Lesevorgänge aktuelle Daten aus SQL tolerieren und die zugrunde liegende Abfrage bereits schnell ist, ersparen Sie sich den Wartungsaufwand für Aktualisierungen. Materialisierte Views sind ein Kompromiss: Aktualität gegen Geschwindigkeit.

Rückblick

Materialisierte Views speichern Abfrageergebnisse zwischen.

  • Auf der Festplatte gespeichert, indiziert und schnell
  • REFRESH manuell oder nach Zeitplan ausführen
  • CONCURRENTLY benötigt einen UNIQUE-Index
  • Für aufwendige, geringfügig veraltete Aggregationen verwenden

Kurzer Test

Was erfordert REFRESH MATERIALIZED VIEW CONCURRENTLY, das ein einfaches REFRESH nicht erfordert?

Häufig gestellte Fragen

Ist die Lektion „Materialisierte Views und REFRESH-Strategien“ kostenlos?

Ja — der vollständige Text von „Materialisierte Views und REFRESH-Strategien“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des SQL Academy-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der SQL Academy-Kurs umfasst insgesamt 4 Lektionen.

Was lerne ich in „Materialisierte Views und REFRESH-Strategien“?

Speichern Sie das Ergebnis einer aufwendigen Abfrage mit MATERIALIZED VIEW dauerhaft und aktualisieren Sie es nach Zeitplan oder bei Bedarf. Du übst SQL Academy mit praktischem Code, den du direkt im Browser ausführst, und ein 24/7 KI-Tutor beantwortet deine Fragen während du die Lektion bearbeitest.

Brauche ich Erfahrung, um SQL Academy zu starten?

Keine Vorkenntnisse erforderlich. SQL Academy auf CoddyKit ist für Anfänger bis fortgeschrittene Lernende strukturiert, sodass du hier starten oder von Anfang an beginnen und in deinem eigenen Tempo voranschreiten kannst. Dies ist Lektion 3 von 4.

Wie lange dauert die Lektion „Materialisierte Views und REFRESH-Strategien“?

Die meisten CoddyKit-Lektionen dauern etwa 5–10 Minuten. Jede ist kompakt und interaktiv, sodass du stetig Fortschritte machst und genau dort weitermachst, wo du aufgehört hast – im Web und in der App.

Kann ich in dieser SQL Academy-Lektion Code schreiben und ausführen?

Ja. Jede SQL Academy-Lektion enthält einen integrierten Code-Editor, sodass du echten Code direkt in deinem Browser schreibst und ausführst und sofort KI-Feedback erhältst — ohne lokale Einrichtung erforderlich.

Alle Lektionen in diesem Kurs

  1. Einfache Views: Logische Wiederverwendung
  2. Aktualisierbare Views und INSTEAD-OF-Trigger
  3. Materialisierte Views und REFRESH-Strategien
  4. Wann Sie voraggregieren sollten
← Zurück zu SQL Academy