In SQL gibt es zwei Arten von Views:
Normale Views sind nützlich, um Komplexität abzudichten, den Zugang zu vereinfachen und Daten aus mehreren Quellen zu vereinen. Sie beschleunigen keine Abfragen, da sie immer zur Laufzeit erstellt werden.
Materialisierte Views bieten Leistungsgewinne für komplexe Berichte und Analysen, bei denen es wichtig ist, nicht jedes Mal auf Aggregationen und Joins zu warten. Sie müssen manuell oder nach einem Zeitplan aktualisiert werden, damit die Daten nicht veraltet sind.
CREATE VIEW active_users AS SELECT id, name FROM users WHERE status = 'active';
CREATE MATERIALIZED VIEW active_users_agg AS SELECT country, COUNT(*) as cnt FROM users WHERE status = 'active' GROUP BY country; -- Zur Aktualisierung: REFRESH MATERIALIZED VIEW active_users_agg;
Kann man Daten in einem VIEW aktualisieren und wie hängt das vom Typ des VIEWs ab?
Es wird oft fälschlicherweise angenommen, dass VIEWs in Bezug auf ihre Aktualisierbarkeit vollständig identisch mit Tabellen sind. TATSÄCHLICH:
REFRESH, andernfalls entsteht eine Dateninkonsistenz.Geschichte 1
Ein BI-Bericht wurde über ein normales VIEW mit mehreren JOINs und Aggregationen erstellt. Nach Erhöhung der Belastung stieg die Zeit zur Erstellung des Berichts auf mehrere Minuten. Ein Systemanalytiker schlug ein materialisiertes View vor, was die Zeit sofort auf Sekunden reduzierte, da die Daten in einer separaten Tabelle gespeichert wurden.
Geschichte 2
Ein Entwickler versuchte während der Migration auf Oracle ein UPDATE über ein normales VIEW durchzuführen, was einen Fehler auslöste: "view with group by is not updatable". Der Grund war die Verwendung von GROUP BY im View.
Geschichte 3
In einem Unternehmen wurden materialisierte Views nach dem Import neuer Daten vergessen zu aktualisieren, was zu Inkonsistenzen bei den Berichten zwischen verschiedenen Benutzern führte, da die Analytik mit den alten Daten aus diesem VIEW arbeitete. Danach wurde ein automatisches REFRESH nach einem Zeitplan hinzugefügt.