EMZETT.
Login

SQL-Views: gespeicherte Abfragen als virtuelle Tabellen

Kurz: Eine View ist eine benannte, gespeicherte Abfrage, die sich wie eine Tabelle benutzen lässt; sie vereinfacht komplexe Abfragen und kann den Zugriff auf Spalten einschränken.

Genauer: Statt eine lange Abfrage mit mehreren Joins immer wieder zu schreiben, legt man sie einmal als View ab (CREATE VIEW). Danach fragt man SELECT * FROM view_name ab. Die View enthält normalerweise keine eigenen Daten, sondern führt die Abfrage bei jedem Aufruf aus.

Im Detail

Nutzen

  • Vereinfachung: komplexe Joins und Berechnungen an einer Stelle.
  • Zugriffsschutz: Nutzer sehen nur ausgewählte Spalten/Zeilen (zum Beispiel ohne Gehaltsspalte), die Rechte werden auf die View vergeben.
  • Stabile Schnittstelle: Die Tabellenstruktur darf sich ändern, die View hält das Ergebnis für Anwendungen gleich.
  • Lesbarkeit von Berichten.

Materialisierte Views

Eine materialisierte View (CREATE MATERIALIZED VIEW) speichert das Ergebnis physisch. Abfragen werden schnell, die Daten sind aber nur so aktuell wie der letzte REFRESH MATERIALIZED VIEW. Geeignet für teure Auswertungen (Statistik, Dashboards), die nicht sekundengenau sein müssen. Bei PostgreSQL kann man mit CONCURRENTLY aktualisieren, ohne Leser zu sperren (setzt einen eindeutigen Index voraus).

Grenzen

  • Normale Views sind nicht schneller als die zugrunde liegende Abfrage; der Planer löst sie in die Abfrage auf.
  • Schreiben über Views funktioniert nur bei einfachen Views (eine Tabelle, keine Aggregation) oder mit INSTEAD OF-Triggern.
  • Verschachtelte Views werden schnell unübersichtlich und langsam.
  • Änderungen an Basistabellen können Views ungültig machen; Abhängigkeiten dokumentieren.

Einordnung (Prüfung)

View = virtuelle Tabelle (Sicht) im externen Schema der Drei-Schichten-Architektur. Vorteile: Datenunabhängigkeit und Datenschutz. Gegenstück: materialisierte View als zwischengespeichertes Ergebnis.

Siehe auch: Joins, Abfrageplaner und EXPLAIN, Unterabfragen und CTE