Seminar „Intelligente Datenbanken“ AG „Intelligente Datenbanken“ Prof. Dr. Rainer Manthey Sommersemester 2005 Materialisierte Sichten in Oracle Kai-Lin Pang 07. Juni 2005 Inhaltsverzeichnis 1 Motivation 3 2 Anpassungsmethoden 3 2.1 Memoryless Refresh-Algorithmus. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 3 Syntax zur Erstellung von materialisierte Sichten 5 3.1 Refresh-Option. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 4 Dimensionen 6 4.1 Syntax zur Erstellung von Dimensionen. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6 4.2 Beispiel. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7 5 Query Rewrite 9 5.1 Konzepte. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9 5.2 General Rewrite-Algorithmus. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .10 6 Heuristic und Cost Based Rewrite 12 7 Zusammenfassung 12 A Literatur 13 -2- 1 Motivation Heutzutage besitzen viele Unternehmen ihre eigenen Datenbanken, in denen betriebliche Informationen gespeichert werden. In vielen Fällen besitzt jede Filiale eines Unternehmens ihre eigene Datenbank. Wie können nun die Daten aller Filialen gemeinsam effizient ausgewertet werden? Eine Möglichkeit besteht darin Sichten in einem Data Warehouse zu materialisieren. Ein Data Warehouse kann als eine Menge von (Materialisierten Sichten) MVs aufgefasst werden. Die MVs sind Resultate einer Anfrage in Form einer relationalen Tabelle gespeichert, um komplexe Anfragen schneller zu beantworten. Aktualisierung der Basistabellen können Inkonsistenzen zwischen einer MV und ihre Basisrelation bestehen. Die Herausforderungen sind geeignete effiziente Methoden zur Anpassung MVs zu finden. In Kapitel 2 wird ein effizienter Algorithmus zur Anpassung MVs vorgestellt. Das Konzept der materialisierten Sichten wurde bis heute noch nicht im SQL-Standard standardisiert. Die Erweiterungen von SQL um MVs sind bisher nur für einzelne DBMSProdukte verfügbar, z.B Oracle, IBM DB2 und MS SQL. Wobei IBM DB2 und MS SQL nicht so eine Fülle von Möglichkeiten besitzen MVs zu definieren im Gegensatz zu Oracle, mit dem sich Kapitel 3 auseinandersetzt. Mit Oracle8i wurden neue Möglichkeiten im Data Warehousing-Bereich eingeführt welche enormen Performanceverbesserungen ermöglichen. Eine Performanceverbesserung wird mithilfe Dimensionen erreicht, welche in Kapitel 4 beschrieben wird. Kapital 5 beschäftigt sich mit MVs, die selbst auch für Abfrageoptimierungen verfügbar sind, bei denen Bestandteile der Abfrage, transparent für den Nutzer, durch Vorberechnete MVs ersetzt werden (Query Rewrite). 2 Anpassungsmethoden Eine Möglichkeit MVs zu aktualisieren ist die vollständige Rematerialisierung, jedoch ist diese Methode sehr ineffizient und mit enormem Zeitaufwand verbunden. Für beliebig komplexe Anfragen ist komplette Neuberechnung seitens Oracle vorgeschrieben. Die inkrementelle Aktualisierung stellt eine andere Methode dar. Dabei werden Datenänderungen an der Basisrelation protokolliert und diese Änderungen in die MVs propagiert. Das Ziel dabei ist, Zugriffe auf die Basisrelation zu vermeiden. Ab Oracle8i werden drei Klassen von inkrementell angepassten MVs unterstützt: „Materialized Join View“ (MJV), die eine Materialisierung einer Anfrage mit INNER und OUTER Equi-Join darstellt „Materialisized Aggregate View“ (MAV), welches eine MJV mit Aggregationen ist „Materialisierte Subquery View“ (MSV) mit materialisierten EXISTS Unteranfragen. -3- 2.1 Memoryless Refresh-Algorithmus Im Folgenden betrachten wir einen effektiven „memoryless“-Algorithmus für die inkrementelle Anpassung MJVs. Die Deltas (∆) werden von zwei Quellen bezogen: RowDML Logs und Direct-Loader Logs. Das Log einer MV ist ein Schemaobjekt, welches Änderungen der Daten in einer Basisrelation aufzeichnet, sodass eine auf der Basisrelation definierende MV fortlaufend aktualisiert werden kann. Im Row-DML Log protokolliert Oracle, welche Zeilen in einer Tabelle mittels DML verändert wurden. ∆X besteht aus drei Mengen: ∆X = {D} + {I} + {U}. In den Mengen {D}, {I} und {U} werden Zeilen gespeichert, die gelöscht, eingefügt oder aktualisiert werden sollen. Zusätzlich werden eine Kopie der geänderten Zeilen, die ROWID, der DML-Typ, und ein Zeitstempel gespeichert. Bei ROWID handelt es sich um ein so genanntes Pseudoattribut. Das ROWIDAttibut identifiziert eindeutig den Speicherplatz jedes Tupels einer Tabelle. Der Zeitstempel stellt fest, ob beim Aktualisieren der MV diese Zeile hinzugefügt, aktualisiert oder gelöscht werden muss. Oracle protokolliert im Direct-Loader Log, welche neuen Zeilen eingefügt werden müssen. Wir erläutern nun den Aktualisierungsalgorithmus Anhang eines Beispiels. Falls die MV M nur mit einer Tabelle verbunden ist, können wir die Änderungen einfach an die MV M weitergeleitet werden. Wir betrachten zwei Tabellen R und S, auf denen durch einen natürlichen Join (z.B. M = R S) eine MV M definiert ist. Dieser Algorithmus lässt sich leicht auf beliebig viele Tabellen verallgemeinern. Seien weiter ∆R bzw. ∆S die Änderungen, die über DML an R bzw. S durchgeführt wurden und seien R' bzw. S' die geänderten Tabellen, also gilt R' = R + ∆R bzw. S' = S + ∆S. Wenn ∆M die Veränderungen darstellt, die an der MV M durchgeführt werden müssen, dann führt dies zur folgenden Gleichung: Q1 ∆M = (R ∆S) + (∆R S) + (∆R ∆S) = (R ∆S) + (∆R S') Da die unveränderten Tabellen (z.B. R und S) nach der Aktualisierung nur unter bestimmten Zeitkosten zu berechnen sind, formt man die bisherige Gleichung so um, dass sie keine der ursprünglichen Tabelle mehr enthält, damit die ursprüngliche Tabelle nicht mehr wiederberechnet werden muss (memoryless): Q2 ∆M = (R' ∆S) - (∆R ∆S) + (∆R S') Die Wiederberechung der Basisrelation nach Datenänderungen wird beim „memoryless“Algorithmus vermieden. In vielen Situationen behandelt der Algorithmus ein Update durch Löschung gefolgt von einer Einfügeoperation und fügt diese entsprechend in {D} und {I} ein. -4- 3 Syntax zur Erstellung materialisierter Sichten Eine MV in Oracle wird mit dem folgenden Statement erzeugt: CREATE MATERIALIZED VIEW <MV name> TABLESPACE <tbs name> { <storage parameters> } <build option> REFRESH <refresh option> <refresh mode> [ ENABLE | DISABLE ] QUERY REWRITE AS (SQL STATEMENTS); Im Gegensatz zur Definition einer virtuellen Sicht, wird bei der MV seht das Schlüsselwort MATERIALIZED vor VIEW als Präfix. Die TABLESPACE-Option erlaubt den Speicherbereich der Tabellen in Oracle zu definieren. Die <build option> bestimmt, wann eine MV erzeugt wird: • BUILD IMMEDIATE: Die MV wird sofort erzeugt. • BUILD DEFFERED: Die MV wird zu einem späteren Zeitpunkt erstellt. • ON PREBUILT TABLE: Die MV kann über existierende Tabelle gelegt werden. 3.1 Refresh-Option Wir diskutieren nun die wichtigsten Optionen von REFRESH: [ REFRESH [ FAST | COMPLETE | FORCE ] [ ON COMMIT | DEMAND ] [ START WITH date ] [ NEXT date ] [ WITH { PRIMARY KEY | ROWID } ] ] REFRESH-Methoden (Wie wird aktualisiert?): • FAST Bei FAST werden Zeilenveränderungen der Basisrelation an die MV inkrementell propagiert. Dabei muss ein MV-Log für jede Basistabelle angelegt werden. Viele weitere Anforderungen müssen erfüllt werden. • NEVER Bei NEVER findet keine Aktualisierung statt. • COMPLETE Die MV wird vollständig rematerialisiert. • FORCE -5- Die FAST Strategie wird bei FORCE wenn möglich verwendet, sonst die COMPLETE. REFRESH-Modus (Wann wird aktualisiert?): • ON COMMIT Die Aktualisierung findet beim Abschluss einer Transaktion an einer Basistabelle statt. • ON DEMAND Die Aktualisierung wird bei Bedarf durch den Benutzer wird festgelegt. REFRESH-Timing: • START WITH Die MV wird zu einem bestimmten Zeitpunkt zum ersten Mal aktualisiert. • NEXT Hierbei bestimmt man das Refresh-Intervall. 4 Dimensionen Eine Dimension ist ein Gebilde, die geordneten Daten kategorisiert, um schnelle Anfragen zu ermöglichen, ein Weg um komplexe Relationsbeziehungen zu beschreiben. Eine Dimension kann bildlich als einen gerichteten Graph dargestellt werden, bei der jede Kante eine hierarchische Beziehung und jeder Knoten eine Aggregationsebene repräsentiert. Eine Hierarchie ist ein Pfad durch diesen Graphen. Jeder Wert eines „Kindes“ in einer Hierarchie ist mit exakt mit einem Wert des „Elternteils“ verbunden. Wozu überhaupt Dimensionen? Häufige Anfragen wie z.B. „Wie viele Produkte X haben wir in Stadt Y im Monat Z verkauft?“ sollen in einem Unternehmen materialisiert werden. Nun wollen wir nicht die Umsätze nur nach Monaten, sondern auch nach Quartalen und Jahren verdichten. Es ist nicht sinnvoll für jede dieser häufigen Anfragen eine entsprechende MV zu erstellen, wegen Redundanzen wie z.B. Woche, Quartal, Jahr, etc. Mithilfe von Dimensionen können wir dem Oracle-Optimizer die Beziehungen zwischen Attributen (z.B. zwischen Monat und Jahr) verständlich machen. -6- 4.1 Syntax zur Erstellung von Dimensionen in Oracle Eine Dimension in Oracle wird mittels des CREATE DIMENSION Befehls erzeugt: CREATE DIMENSION <dimension name> LEVEL [ <level> IS <level_table.level_column> <level> IS <level_table.level_column> … ] HIERARCHY <hierarchy_name> ( [ <child_level> CHILD OF <parent_level> <child_level> CHILD OF <parent_level> … ] ) ATTRIBUTE <level> DETERMINES <dependent_column> <level> DETERMINES <dependent_column>, … ; Die LEVEL-Klausel definiert den Namen einer Ebene. Eine oder mehrere Hierarchien (Relationsbeziehungen) können mittels der HIERARCHY-Klauseln definiert werden. 1:1 funktionale Abhängigkeiten werden mit den ATTRIBUTE-Klauseln Oracle bekannt gegeben. Die Datenorganisation eines Data Warehouses unterscheidet zwischen Dimensionen und Fakten. Dimensionen und Fakten werden anhand des Sternschemas modelliert. Dimensionstabelle: Die Dimensionstabellen enthalten die Stammdaten und sind in der Regel denormalisiert. Jede Tabelle besitzt ihren eigenen Primärschlüssel. Faktentabelle: Es gibt zentrale Faktentabelle, um die sich „sternenförming“ herum diverse Dimensionstabellen anordnen. Sie ist in der Regel normalisiert, hat einen eigenen Primärschlüssel, enthält Fremdschlüssel zu allen anderen Dimensionstabellen und beinhalten die Kennzahlen. 4.2 Beispiel Wir wollen nun die Anfrage „Wie viele Produkte X haben wir in Stadt Y im Monat Z verkauft?“ materialisieren. Dazu werden die Basisdaten anhand des Sternschemas modelliert (Abb. 1). -7- Städte Dimensionstabelle Dimensionstabelle Zeit Datum Sadt_Id Faktentabelle Faktentabelle Region Stadt Umsätze Umsatz_ID Stadt_Id Woche Monatsname Monat Quartal Jahr Produkt_Id Datum Produkte Umsatz Produkt_Id Produktname Foreign ForeignKeys Keyszu zu allen allen Dimensionstabellen Dimensionstabellen Produktgruppe Marke Abb. 1 In diesem Beispiel besitzt die Faktentabelle Fremdschlüsseln Stadt_Id, Produkt_Id und Datum auf die Dimensionstabellen Städte, Produkte und Zeit. Die Datenbank verwaltet Fakten wie Umsätze und Verkaufszahlen je Region, Produkt und Zeit. Um „Umsatz Anfragen“ nach Quartal oder Jahr effizient beantworten zu können, teilen wir die Beziehungen zwischen den Attributen mithilfe von Dimensionen dem Oracle-Optimizer mit. Dazu betrachten wir in diesem Beispiel die Zeitdimension (Abb. 2), die in Jahr, Quartal, Monat, Woche und Datum unterteilt werden kann. Wochenumsätze Wochenumsätze können könnenzu zuJahresumsätze Jahresumsätze „aufgerollt“ „aufgerollt“werden. werden. Jahr Jahr Jeder JederMonat Monatmuss mussininexakt exakt einem Quartal einem Quartalenthalten enthaltensein sein (hierarchische (hierarchischeRelation). Relation). Quartal Quartal Monat Monat Monatsumsätze Monatsumsätze können könnenzu zuQuartalsQuartalsumsätzen umsätzen„aufgerollt“ „aufgerollt“ werden. werden. Woche Woche Datum Datum Abb. 2 Jeder Monat muss exakt in einem Quartal enthalten sein, folglich können Monatsumsätze zu einer Summe von Quartalumsätzen aufgerollt (ROLLUP) werden. „ROLLUP“ ermöglichst Oracle innerhalb einer Dimension auf summierte Daten zuzugreifen. Die Zeitdimension und die Beziehungen zwischen den Attributen in diesem Beispiel, wird Oracle mittels des CREATE DIMENSION-Befehls bekannt gegeben: CREATE DIMENSION zeit_dim LEVEL Datum IS Zeit.Datum LEVEL Woche IS Zeit.Woche LEVEL Monat IS Zeit.Monat LEVEL Quartal IS Zeit.Quartal LEVEL Jahr IS Zeit.Jahr -8- HIERARCHY Kalender_rollup ( Datum CHILD OF Monat CHILD OF Quartal CHILD OF Jahr ) HIERARCHY woche_rollup ( Datum CHILD OF Woche CHILD OF Jahr ) ATTRIBUTE Monat DETERMINES Monatsname; Zu beachten ist, dass Zeit.Datum in Oracle vom Typ DATE ist. Falls wir in der Dimensionstabelle Zeit außerdem eine Spalte Monatsname enthält, dann kann Monatsname von Monat funktional abhängig gemacht werden. Da Oracle nun die Zeithierarchie bekannt ist, ist ein „intelligentes“ Query Rewrite durch den Oracle-Optimierer möglich. Wenn wir eine MV die Umsätze nach Monat verdichtet haben, dann können wir z.B. Umsätze nach Jahr, mittels der MV in welcher die monatsweise verdichteten Daten abgespeichert sind, effizient beantwortet werden, anstelle auf die Basisrelation zuzugreifen bzw. neu zu berechnen. Hierbei erlaubt es maximal 12-Tupel pro Stadt und Marke aus den Umsätze MV zu aggregieren. Die Implementierung vom „intelligenten“ Query Rewrite wurde seitens Oracle nicht dokumentiert. 5 Query Rewrite 5.1 Konzepte Der Oracle-Optimierer nutzt Informationen über verlustfreie Joins, funktionale Abhängigkeiten, Spaltenäquivalenz und Join-Ableitbarkeit, um grosse Mengen von Anfragen mit einer kleinen Menge von MVs zu umschreiben. Join-Ableitbarkeit ermöglichst uns einen Join in einer Abfrage durch einen Join in einer MV wiederzuberechnen. Mit einem LEFT OUTER Join in einer MV ist es möglich INNER Join in einer Anfrage durch Filterung von Anti-Join-Zeilen, Semi-Join durch Eliminierung duplizierter Zeilen und Anti-Join durch Filterung Theinner Join-Zeilen wiederzuberechnen. Mit INNER Join in einer MV ist es möglich Semi-Join in einer Anfrage durch Eliminierung von duplizierten Zeilen zu berechnen. Die Join-Ableitbarkeit Unterstützung vom Oracle erlaubt Anfragen mit IN und EXISTS Subanfragen (Semi-Joins) mit MVs mit Inner oder LEFT OUTER Joins zu umschreiben. Abfragen mit NOT IN und NOT EXISTS Subanfragen (AntiJoins) können mit MVs mit Left Outer Joins umschrieben werden. -9- 5.2 General Rewrite-Algorithmus Bevor eine MV umschrieben wird, wird mittels verschiedenen Algorithmen überprüft, ob eine MV überhaupt umschrieben werden kann. Die Abb. 3 zeigt uns welche Überprüfungen auf verschiedene MVs durchzuführen sind. Query Rewrite Checks MV mit Joins MV mit Joins und MV mit Aggregaten auf Aggregaten Einzeltabellen Full Exact Text Match X X X Partial Text Match X X X Join Compatibility X X - Data Sufficiency X X X Grouping Compatibility - X X Aggregate Compatibility - X X Abb. 3 Oracle führt Query Rewrite aus, indem die Join-Graphen eines Query Blocks (QB) mit einer potentiellen MV verglichen werden. Jede MV ist ein potentieller Teilplan, um eine Anfrage zu dienen. Die zwei Graphen sollten sich schneiden aber auch keine Überscheidung des Subgraphen ist in einem QB, in einer MV oder beide erlaubt. Subanfrage Transformation beinhaltet die Umwandlung von IN oder EXISTS Subabfragen in Semi-Joins und NOT IN und NOT EXISTS Unterabfragen in Anti-Joins, welches höchst komplexe Abfragen ermöglichen. Der Algorithmus ist in zwei Phasen aufgeteilt: Eligibility und Transformation: Die Eligibility-Phase entscheidet ob überhaupt Rewrite möglich ist, entscheidet wie man eine MV mit nicht überscheidende Relationen in einen QB joint und entscheidet welche zusätzliche Join- oder Filterungsbedingungen erforderlich sind. Wenn ein QB eine Aggregation beinhaltet, dann entscheidet der Eligibility-Algorithmus, ob die QB Aggregate durch Aggregate in einer potentiellen MAV berechenbar sind. Die Transformation-Phase ersetzt überschneidende Relationen von einem QB mit einer MV und fügt falls erforderlich zusätzliche „Joins“ und „Selection“ Eigenschaften ein um den QB durch die MV wiederzuerlangen. Die folgenden Eligibility-Prüfungen werden ausgeführt bevor ein QB umschrieben wird: 1. Join Compatibility Check: Der Join-Graph G(M) einer MV M wird mit dem JoinGraphen G(Q) eines QB verglichen. Der Subgraph G(I) stellt den Schnitt zwischen G(M) und G(Q) dar, G(I)=G(M)∩G(Q). Der Delta Subgraph ∆G(Q) stellt den Bereich - 10 - von G(Q) der nicht in G(I) ist dar, ∆G(Q)=G(Q)-G(I), und der Delta Subgraph ∆G(M) stellt den Bereich von G(M) der nicht in G(I) ist dar, ∆G(M)=G(M)-G(I). G(Q) kann durch G(Q)=∆G(Q) M verlustfrei berechnet werden, wenn alle Joins in ∆G(M) verlustfrei und die Joins in G(I) zwischen der MV und QB vom selben Typ sind. Eine Transformation ist erforderlich wenn einige Joins in G(I) nicht vom selben Typ, aber kompatibel sind. Zum Beispiel, wenn G(M)=S←L→O („←“ bzw. „→“ bezeichnet einen LEFT bzw. RIGHT OUTER Join) und G(G)=L O C, dann gilt ∆G(M)=S, ∆G(I)=L→O, G(Q)=C und wenn S←L verlustfrei ist, dann kann der QB umschrieben werden als MV C mit Filterung von Anti-Join Zeilen in L→O. 2. Data Sufficiency Check: Alle erforderlichen Daten müssen in einer MV vorhanden sein oder durch eine Join Back-Operation berechnet werden können. Zum Beispiel, wenn der QB Referenzen auf die Spalte Produktname von der Relation Produkte enthält, die funktional durch die Produkt_Id Spalte in einer MV bestimmt wird, so kann Produktname berechnet werden durch MV Produkte mit Produkt_Id. Und wenn Produkt_Id in Produkte nicht UNIQUE ist, dann wird die MV mit einer abgeleiteten Tabelle gejoint, die eindeutig Produkt_Id mit anderen benötigen Spalten von Produkte wählt. 3. Grouping Compatibility Check: Wenn ein QB eine GROUP BY Klausel enthält, dann sollte jede Gruppierungsspalte von einem QB exakt übereinstimmen mit einer oder von einer Gruppierungsspalte einer potentiellen MAV funktionell abhängig sein. Wenn eine QB-kompatiblere, funktional abhängige Gruppierung gefunden wurde, dann sollten die Aggregate in MAV aufgerollt werden. Zum Beispiel, wenn ein QB SUM(Umsaetze) BY Jahr anfragt und die potentielle MAV SUM(Umsaetze) BY Monat enthält und weiter bekannt ist, dass Monat→Jahr, dann kann der QB umschrieben werden durch aufrollen von SUM(Umsaetze) in einer MAV von der Monatsebene auf Jahresebene. 4. Aggregate Compatibility Check: Wenn ein QB Aggregate enthält, dann muss jedes Aggregat von einem Aggregat oder mehreren Aggregaten in einer potentiellen MAV berechenbar sein. Zum Beispiel ist in einem QB SUM(x) nur durch COUNT(x) und AVG(x) in einer MAV berechenbar. Eine Anfrage mit AVG(x) kann beantwortet werden, wenn SUM(x) und COUNT(x) in einer MAV vorhanden ist. AVG(x) kann aufgerollt werden, nur wenn COUNT(x) auch existiert. Aggregate mit Ausdrücken werden ebenfalls unterstützt. Zum Beispiel, SUM(a+b) in einem QB wird entweder mit SUM(a+b) oder SUM(b+a) in einer MAV bestimmt, und SUM(a)+SUM(b) in einem QB wird mit SUM(a) und SUM(b) in einer MAV bestimmt. - 11 - 6 Heuristic und Cost Based Rewrite Eine MV wird auf eine Menge von Relationen definiert, es muss eine Schnittmenge von dieser Menge mit der Menge von Relationen in einem QB existieren, damit die MV ein Kandidat für „Umschreibung“ sein kann. Um eine Menge von potentiellen MVs für einen QB zu erfassen wird eine Liste von MVs für jede Relation gehalten. Diese Liste enthält für die Relation R alle MVs, die R als ihre Basistabelle referenziert. Wenn ein QB Aggregate enthält, dann wird als erstes versucht, diese Aggregate mit einer MAV zu umschreiben. Wenn noch Joins verbleiben, wird die Umschreibung mit MJVs oder MAVs versucht. Rewrite wird solange wiederholt bis noch Joins in einem QB übrig bleiben oder keine geeignete MV gefunden wird. Da die Datengröße durch Aggregation reduziert wird, wird immer zuerst versucht Rewrite mit einer MAV durchzuführen, um diese Vorteile als erstes zu erreichen. Wenn es möglich ist einen QB mit mehreren geeigneten MVs zu umschreiben, wird eine Heuristik namens „Query Reduction Factor“ verwendet um die beste geeignete MV in einer Liste geeigneter MVs zu identifizieren. Nachdem die gesamte Anfrage mit einer MV oder mehreren MVs umschrieben wurde, ist die Anfrage nun optimiert und seine optimalen Kosten sind gefunden. 7 Zusammenfassung Mithilfe von MVs in Oracle können selbst sehr komplexe Anfragen mittels Query Rewrite effizient beantwortet werden. MVs sind transparent für den Nutzer, die können nach Bedarf inkrementell oder mit „Scheduler“ aktualisiert werden. Die Auswahl und die Pflege der MVs ist kein triviales Problem, deshalb wurde sie bis jetzt noch nicht im SQL-Standard standardisiert. Dimensionen erlauben den Oracle-Optimizer über komplexe Datenbeziehungen zu „informieren“ um dadurch „intelligentes“ Query Rewrite zu ermöglichen. - 12 - A Literatur [BDDFFNSWZ98] R.G. Bello, K. Dias, A. Downing, J. Feenan, J. Finnerty, W.D. Norcott, H. Sun, A. Witkowski, M. Ziauddin: Materialized Views In Oracle, Proc. 24th VLDB Conf. New York, 1998, S. 659–664 [Or10g] Oracle10g Database SQL Reference [OrDWG9i] Oracle9i Data Warehousing Guide [OrAR9i] Oracle9i Advanced Replication [OrBI9i] Business Intelligence with Oracle9i – An Oracle Technical White Paper - 13 -