Ich werde eine DW entwerfen und habe von materialisierten Ansichten gehört. Eigentlich möchte ich eine Ansicht erstellen und sie sollte automatisch aktualisiert werden, wenn Basistabellen geändert werden. Kann mir jemand mit einem Abfragebeispiel erklären ..
101
Obwohl nur aus technischer Sicht, klingen indizierte Ansichten wie etwas, mit dem jeder die Leistung verbessern könnte, aber das reale Szenario ist sehr unterschiedlich. Es ist mir nicht gelungen, indizierte Ansichten dort zu verwenden, wo ich sie am dringendsten benötige, da zu viele Einschränkungen bestehen, was indiziert werden kann und was nicht.
Wenn Sie in den Ansichten äußere Verknüpfungen haben, können diese nicht verwendet werden. Außerdem sind allgemeine Tabellenausdrücke nicht zulässig. Wenn Sie in Unterauswahlen oder abgeleiteten Tabellen (z. B. mit partition by-Klausel) eine Reihenfolge haben, haben Sie ebenfalls Pech.
Das lässt nur sehr einfache Szenarien übrig, um indizierte Ansichten zu verwenden. Meiner Meinung nach kann etwas optimiert werden, indem ohnehin geeignete Indizes für zugrunde liegende Tabellen erstellt werden.
Ich werde begeistert sein, einige reale Szenarien zu hören, in denen Menschen tatsächlich indizierte Ansichten zu ihrem Vorteil verwendet haben und ohne sie nicht hätten auskommen können
quelle
(NOEXPAND)
den Abfragen, die die indizierten Ansichten verwenden , einen Hinweis hinzuzufügen . Und dann merkt man den Unterschied. Der Vorteil der Verwendung der indizierten Ansichten gegenüber der "ordnungsgemäßen Indizierung der Tabellen" besteht darin, dass die Datensatzauswahl eingeschränkt wird. Andernfalls ist dies derselbe.Möglicherweise benötigen Sie etwas mehr Hintergrundinformationen darüber, was eine materialisierte Ansicht tatsächlich ist. In Oracle ist dies ein Objekt, das aus einer Reihe von Elementen besteht, wenn Sie versuchen, es an anderer Stelle zu erstellen.
Ein MVIEW ist im Wesentlichen eine Momentaufnahme von Daten aus einer anderen Quelle. Im Gegensatz zu einer Ansicht werden die Daten nicht gefunden, wenn Sie die Ansicht abfragen. Sie werden lokal in einer Tabellenform gespeichert. Die MVIEW wird mithilfe einer Hintergrundprozedur aktualisiert, die in regelmäßigen Abständen oder bei Änderungen der Quelldaten gestartet wird. Oracle ermöglicht vollständige oder teilweise Aktualisierungen.
In SQL Server würde ich Folgendes verwenden, um eine grundlegende MVIEW zu erstellen, die regelmäßig (vollständig) aktualisiert wird.
Zunächst eine Ansicht. Dies sollte für die meisten einfach sein, da Ansichten in jeder Datenbank häufig vorkommen. Als nächstes eine Tabelle. Dies sollte mit der Ansicht in Spalten und Daten identisch sein. Dadurch wird eine Momentaufnahme der Ansichtsdaten gespeichert. Anschließend eine Prozedur, mit der die Tabelle abgeschnitten und basierend auf den aktuellen Daten in der Ansicht neu geladen wird. Schließlich ein Job, der die Prozedur auslöst, um seine Arbeit zu starten.
Alles andere ist Experimentieren.
quelle
Wenn eine indizierte Ansicht keine Option ist und keine schnellen Aktualisierungen erforderlich sind, können Sie eine Hack-Cache-Tabelle erstellen:
dann sp_rename view / table oder ändern Sie alle Abfragen oder anderen Ansichten, die darauf verweisen, um auf die Cache-Tabelle zu verweisen.
Planen Sie täglich / abends / wöchentlich / wie nicht erfrischen
NB: Dies wird Platz verbrauchen, auch in Ihren TX-Protokollen. Am besten für kleine Datensätze geeignet, die nur langsam berechnet werden können. Vielleicht umgestalten, um "einfache, aber große" Spalten zuerst in einer Außenansicht zu entfernen.
quelle
Für MS T-SQL Server empfehle ich, einen Index mit der Anweisung "include" zu erstellen. Eindeutigkeit ist nicht erforderlich, ebenso wenig wie die physische Sortierung von Daten, die einem Clustered-Index zugeordnet sind. Der "Index ... Include ()" erstellt einen separaten physischen Datenspeicher, der automatisch vom System verwaltet wird. Es ist konzeptionell einer Oracle Materialized View sehr ähnlich.
https://msdn.microsoft.com/en-us/library/ms190806.aspx
https://technet.microsoft.com/en-us/library/ms189607(v=sql.105).aspx
quelle