2010-11-18 4 views
30

Es ist mir klar, warum eine materialisierte Ansicht vorzuziehen ist, wenn Sie nur eine Basistabelle abfragen. Was nicht so klar ist, ist der Vorteil gegenüber dem Erstellen einer anderen Tabelle mit den gleichen Daten wie die MV. Ist der einzige Vorteil der MV wirklich nur die einfache Erstellung/Wartung?Materialisierte Ansicht im Vergleich zu Tabellen: Was sind die Vorteile?

Ist eine MV nicht äquivalent zu einer Tabelle mit übereinstimmendem Schema und einem INSERT INTO mit der MVs SELECT-Anweisung?

Bedeutung, können Sie eine MV erstellen, wie

CREATE MATERIALIZED VIEW ... AS 
SELECT * FROM FOO; 

folgt Und Sie können eine äquivalente Tabelle erstellen:

CREATE TABLE bar (....); 
INSERT INTO bar 
SELECT * FROM FOO; 

Nicht, dass Leichtigkeit der Schöpfung zu sagen/Wartung ist nicht genug ein Vorteil, ich möchte nur sicherstellen, dass ich nichts vermisse.

+3

'CREATE VIEW' erstellt * keine * materialisierte Ansicht. –

+0

Nun, um genau zu sein, erzeugt dies keine materialisierte Ansicht, aber in SQL Server und PostgreSQL schließt es auch keine materialisierte Ansicht aus. – seth

Antwort

0

Der Unterschied zwischen Tabelle und MV ist mit der Tabelle, Sie können DML-Operationen ausführen, die von anderen Benutzern gesehen werden, während die Änderungen, die Sie an MV vornehmen, für andere nicht verfügbar sind, bis Sie Ihren Datenbankserver aktualisieren.

MV hat einen weiteren Vorteil, wenn Sie MV basierend auf mehreren Tabellen mit komplexen Abfragen erstellen, die Benutzer bei der Verwendung von MV die Leistung drastisch erhöht.

+0

Der erste Punkt klingt nicht wie ein Vorteil. Auch scheint es, als ob es von hier ohne Referenz kopiert wurde http://itknowledgeexchange.techtarget.com/itanswers/difference-between-materialized-views-and-tables/ – codeObserver

9

Sie sind grundsätzlich äquivalent, aber der MV hat verschiedene Optionen für die automatische Aktualisierung der Daten, was nicht nur die Wartungsfreundlichkeit verbessert, sondern in einigen Fällen auch die Effizienz, da er Änderungen nach Zeilen verfolgen kann.

6

Materialisierte Ansichten können aktualisiert werden - sie sind Momentaufnahmen von Daten, die in regelmäßigen Abständen aufgenommen werden.

Ihre zweite Aussage ist nur ein einmaliger Deal - Daten werden zu diesem Zeitpunkt in die Tabelle eingefügt. Weitere Änderungen an den Originaldaten werden in der Tabelle nicht berücksichtigt.

4

Der große Vorteil einer Materialized View ist das extrem schnelle Abrufen von Aggregatdaten, da diese vorberechnet und gespeichert werden, auf Kosten von Einfügen/Aktualisieren/Löschen. Die Datenbank wird die Materialized View mit den realen Daten synchronisieren, ohne das Rad neu erfinden zu müssen. Lassen Sie die Datenbank dies für Sie tun.

18

Dynamic query rewriting. Materialisierte Ansichten definieren nicht nur Beziehungen, sondern ermöglichen Ihnen auch die Vorausberechnung teurer Joins und Aggregationen. Der Optimierer ist intelligent genug, um die MV zu verwenden, um relevante Daten zu holen, selbst wenn die MV nicht explizit in der Abfrage verwendet wird (bei DB-Einstellungen usw.).

Ihre Frage wurde mit Oracle getaggt, aber MSSQL macht auch ähnliche Tricks.

1

Zusätzlich zu den anderen Antworten (weil ich es nicht gesehen habe), würde ich sagen, dass, obwohl sie beide Raum verbrauchen, die materialisierte Ansicht logisch normalisiert wird, während die zusätzliche Tabelle logisch denormalisiert wird. Wenn dies keine vorübergehende Ausnahme ist, müssen Sie daran denken, die zweite Tabelle zu aktualisieren, wenn Sie die Basistabelle aktualisieren.

4
  1. Die materialisierte Ansicht mit den Beziehungen Basis synchronisiert wird bleiben von denen es abhängt.

  2. Wenn die materialisierte Ansicht aktualisierbar ist und wenn Sie die materialisierte Ansicht ändern, wird auch die Basisrelation geändert, von der sie abhängig ist.

1

1) Beschleunigung Schreiboperationen: Da Indizes können auf materialisierte Ansichten erstellt werden, aus ihnen zu lesen ist sehr schnell. Beachten Sie Folgendes: Wenn Sie einen Index für eine Tabelle erstellen, die viele Schreibvorgänge enthält, wird der Schreibprozess durch den Wartungsaufwand für die Indexwartung tendenziell verlangsamt. Um dies zu vermeiden, können Sie eine Materialisierungsansicht erstellen und Indizes für sie erstellen. Diese Indizes können im Hintergrund verwaltet werden und beeinträchtigen nicht die Tabellenschreibvorgänge.

2) Beschleunigter Lesevorgang: Komplexe Joins; Pivots, deren Laufzeit lange dauert, können beschleunigt werden, indem Indizes für die materialisierten Ansichten erstellt werden. Dies wird in den meisten Berichtsszenarien sehr nützlich.

0

In additition zu den bereits erwähnt Vorteile:

  • dynamische Abfrage Umschreiben (kurz gesagt, der DB-Optimierer weiß, wie die MV erstellt wird, so dass er sie wiederverwenden können andere Abfragen zu optimieren),
  • optional , automatisch, möglicherweise inkrementelle Aktualisierung,

Ich mag würde erwähnen:

  • können einige materialisierte Ansichten geschrieben werden, die die Quelltabelle aktualisieren (z. B. können Joins mit Primärschlüsseln geschrieben werden, umgekehrt, wenn die materialisierte Ansicht das Ergebnis einer Gruppe ist, in die nicht geschrieben werden kann)
  • Der Datenbankserver behält die Abfrage bei, mit der die Daten erstellt wurden, und kann sie erneut ausführen. Wenn Sie eine Tabelle erstellen, benötigen Sie ein externes Tool (möglicherweise nur ein benutzerdefiniertes Skript), um die Abfrage erneut auszuführen, wenn eine Aktualisierung vom Benutzer benötigt/angefordert wird. (Ich arbeite für eine Firma, die ein Werkzeug entwickelt, das das und vieles mehr macht).
Verwandte Themen