8.3.4 Materialisierte Sichten in aktuellen DBMS
Da materialisierte Sichten noch nicht Eingang in den SQL-Standard gefunden
haben, müssen herstellerspezifische Erweiterungen zur Definition genutzt wer-
den, die wir nachfolgend kurz vorstellen.
Oracle
In Oracle gibt es eine spezielle CREATE MATERIALIZED VIEW-Anweisung, die wie
folgt aufgebaut ist:
CREATE MATERIALIZED VIEW MatViewName
BUILD { IMMEDIATE | DEFERRED }
REFRESH { FAST | FORCE } ON { COMPLETE | DEMAND }
ENABLE QUERY REWRITE
AS SELECT ... FROM ... WHERE ... GROUP BY ...
Das Löschen ist wie üblich über die korrespondierende DROP-Anweisung mög-
lich.
Beim Anlegen einer materialisierten Sicht gibt es eine Reihe von Konfigu-
rationsmöglichkeiten bezüglich:
dem Füllen der Sicht
Hier wird festgelegt, wann das Anfrageergebnis in der Sicht materialisiert
wird:
BUILD IMMEDIATE erzwingt das sofortige Füllen,
BUILD DEFERRED lässt das Füllen zu einem späteren Zeitpunkt zu.
der Aktualisierungsstrategie
Hiermit wird spezifiziert, wie die Sicht aktualisiert wird, wenn Änderun-
gen auf den Basisrelationen vorgenommen werden:
REFRESH COMPLETE ist die vollständige Neuberechnung der Sicht,
REFRESH FAST propagiert Änderungen auf den Basisrelationen in
Sichtänderungen,
REFRESH NEVER bedeutet, dass keine Aktualisierung der Sicht stattfin-
det,
REFRESH FORCE versucht wenn möglich FAST, sonst COMPLETE.
dem Aktualisierungszeitpunkt
Damit legt man den Zeitpunkt der Sichtaktualisierung fest:
ON COMMIT direkt nach Änderung der Basisrelation,
8.3 Materialisierte Sichten 257
ON DEMAND bezeichnet eine explizite Aktualisierung, z.B. über den Auf-
ruf einer PL/SQL-Prozedur dbms
_
mview.refresh.
Die inkrementelle Änderung über die REFRESH FAST-Option erfordert die Ver-
wendung von Log-Tabellen, in denen die Änderungsoperationen protokolliert
werden. Diese werden durch automatisch generierte Trigger auf den Basisre-
lationen erfasst. Eine derartige Log-Tabelle wird für jede von der materiali-
sierten Sicht referenzierten Basisrelationen benötigt und durch die folgende
Anweisung angelegt:
CREATE MATERIALIZED VIEW LOG ON Basistabelle
WITH ...
In der WITH-Klausel kann spezifiziert werden, welche Attribute für die Protokol-
lierung der betroffenen Tupel genutzt werden sollen. Sinnvolle Angaben sind
hier u.a. PRIMARY KEY für den Primärschlüssel oder ROWID für den Tupelidentifi-
kator.
Neben der Forderung nach Log-Tabellen gibt es noch weitere Restriktio-
nen der Sichtanfragen für eine inkrementelle Aktualisierbarkeit. Details hier-
zu sind in der Oracle-Dokumentation zu finden.
JBeispiel 8-4I Es soll eine Materialisierung der Umsatz- und Verkaufszahlen
von Wein in Thüringen aus dem Jahr 2011 definiert werden. Die Sichtdefinition
lautet dann wie folgt:
CREATE MATERIALIZED VIEW WeinVerkaufThueringen2011
BUILD IMMEDIATE REFRESH FAST
ENABLE QUERY REWRITE
AS
SELECT P
_
Produktgruppe, O
_
Stadt, SUM(V
_
Anzahl) AS Einheiten,
SUM(V
_
Anzahl
*
P
_
Verkaufspreis) AS Umsatz
FROM Verkauf, Produkt, Zeit, Ort
where V
_
Produkt
_
ID = P
_
ID AND
V
_
Zeit
_
ID = Z
_
ID AND V
_
Ort
_
ID = O
_
ID AND
P
_
Produktkategorie = ’Wein’ AND YEAR(Z
_
Datum) = 2011 AND
O
_
Bundesland = ’Thüringen’
GROUP BY P
_
Produktgruppe, O
_
Stadt
Zusätzlich muss noch die Log-Tabelle angelegt werden:
CREATE MATERIALIZED VIEW LOG ON Verkauf
2
Oracle nimmt ein Umschreiben von auf Basisrelationen formulierten
Anfragen in Anfragen auf materialisierten Sichten vor, sofern diese mit
258 8 Anfrageverarbeitung und materialisierte Sichten
ENABLE QUERY REWRITE definiert wurden. Zur Unterstützung bei der Auswahl
materialisierter Sichten wird ein als Summary Advisor bezeichnetes Adminis-
trationswerkzeug angeboten.
DB2
In IBM DB2 werden materialisierte Sichten als Materialized Query Tables
bzw. Summary Tables bezeichnet. Das Anlegen erfolgt über eine CREATE TABLE-
Anweisung mit DB2-spezifischen Erweiterungen:
CREATE TABLE MatViewName AS (
AS SELECT ... FROM ... WHERE ... GROUP BY ...
) DATA INITIALLY DEFERRED
REFRESH { DEFERRED | IMMEDIATE }
Auch hier kann der Aktualisierungszeitpunkt angegeben werden, wobei zwi-
schen sofortiger Aktualisierung (REFRESH IMMEDIATE) bei Änderungen der Ba-
sisrelationen und verzögerter, d.h. expliziter Aktualisierung durch eine Anwei-
sung unterschieden wird:
REFRESH TABLE MatViewName
JBeispiel 8-5I Das für Oracle gezeigte Beispiel 8-4 kann daher wie folgt in
DB2 umgesetzt werden:
CREATE TABLE WeinVerkaufThueringen2011 AS (
SELECT P
_
Produktgruppe, O
_
Stadt, SUM(V
_
Anzahl) AS Einheiten,
SUM(V
_
Anzahl
*
P
_
Verkaufspreis) AS Umsatz
FROM Verkauf, Produkt, Zeit, Ort
where V
_
Produkt
_
ID = P.
_
ID AND
V
_
Zeit
_
ID = Z
_
ID AND V
_
Ort
_
ID = O
_
ID AND
P
_
Produktkategorie = ’Wein’ AND YEAR(Z
_
Datum) = 2011 AND
O
_
Bundesland = ’Thüringen’
GROUP BY P
_
Produktgruppe, O
_
Stadt)
DATA INITIALLY DEFERRED
REFRESH IMMEDIATE
2
Wie in Oracle wird ein automatisiertes Umschreiben von Anfragen zur
Nutzung von materialisierten Sichten unterstützt, und auch die Auswahl wird
durch entsprechende Werkzeuge vereinfacht.
8.3 Materialisierte Sichten 259

Get Data Warehouse Technologien now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.