Eine indizierte Ansicht (Indexed View, materialisierte Ansicht mit Index) ist eine Ansicht (VIEW), für die ein eindeutiger Clusterindex erstellt wurde. Dies ermöglicht die physische Speicherung der Abfrageergebnisse auf der Festplatte und die Verwendung des Index zur Beschleunigung des Zugriffs.
Vorteile:
Einschränkungen:
TEXT, NTEXT, IMAGE, einige Funktionen nicht verwendet werden).CREATE VIEW dbo.SalesSummary WITH SCHEMABINDING AS SELECT SalesPersonID, COUNT_BIG(*) AS SalesCount, SUM(TotalDue) AS TotalDue FROM dbo.Sales GROUP BY SalesPersonID; GO CREATE UNIQUE CLUSTERED INDEX idx_SalesSummary ON dbo.SalesSummary (SalesPersonID);
F: Erlauben alle Ansichten, einen Index (Clusterindex) darauf zu erstellen?
A: Nein, indizierbar sind nur solche VIEW, die vollständig den Einschränkungen entsprechen (z.B. keine externen Verweise, die Aggregatfunktionen sind konsistent, usw.). Andernfalls gibt der Abfragebefehl zur Erstellung des Index einen Fehler aus.
Geschichte
In einem realen Projekt im Bankensystem war es erforderlich, die Abfragen zu aggregierten Berichten zu beschleunigen. Ein indizierter VIEW wurde ohne Analyse der Belastung beim Aktualisieren der Tabellen erstellt. Bei massiven Einfügeoperationen sank die Leistung der Haupttabelle aufgrund der erheblichen Kosten für die Aktualisierung des Ansichtsindex stark.
Geschichte
Ein Spezialist nahm fälschlicherweise an, dass man eine VIEW mit einem angegebene JOIN auf einer externen Tabelle und einer Funktion GETDATE() indizieren könne. Der Abfragebefehl zur Erstellung des Index endete mit dem Fehler "Cannot create index on view with non-deterministic functions". Ein Tag wurde für die Korrektur der Projektarchitektur verschwendet.
Geschichte
In einem großen E-Commerce-Projekt führte die Aktualisierung der Daten in der Basistabelle "Produkte" zu aufgetretenen Sperren. Grund — falsches Transaktionsmanagement bei Vorhandensein einer großen indizierten VIEW, in der die Aggregation Millionen von Zeilen betraf.