ProgrammierungBackend-Entwickler

Was ist eine indizierte Ansicht (Indexed View) in SQL, wie wird sie implementiert, wofür wird sie verwendet und welche Fallstricke gibt es bei ihrer Anwendung?

Bestehen Sie Vorstellungsgespräche mit dem Hintsage-KI-Assistenten

Antwort.

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:

  • Schnelle Abfrage aggregierter oder häufig genutzter Daten.
  • Entlastung von Echtzeitberechnungen.

Einschränkungen:

  • Nicht alle Abfragetypen werden unterstützt (z.B. können die Datentypen TEXT, NTEXT, IMAGE, einige Funktionen nicht verwendet werden).
  • zusätzliche Kosten für die Pflege des Indexes bei Änderungen in der Basistabelle.
  • Es müssen strenge Regeln bei der Deklaration beachtet werden.

Beispielcode

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);

Trickfrage.

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.

Beispiele für tatsächliche Fehler aufgrund mangelnden Wissens über die Feinheiten des Themas.


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.