Sí , Ansichten puede einen geclusterten Index zugewiesen haben, und wenn dies der Fall ist, werden sie temporäre Ergebnisse speichern, die die daraus resultierenden Abfragen beschleunigen können.
Die Dokumentation von Microsoft macht deutlich, dass Views die Leistung verbessern kann.
Erstens: Die meisten Ansichten, die Menschen erstellen, sind einfach Views und verwenden diese Funktion nicht und unterscheiden sich daher nicht von der direkten Abfrage der Basistabellen. Einfache Views werden an Ort und Stelle expandiert und damit nicht direkt zur Leistungsverbesserung beitragen - so viel ist wahr. Allerdings, indizierte Ansichten können dramatisch die Leistung zu verbessern.
Lassen Sie mich direkt zur Dokumentation gehen:
Nachdem ein eindeutiger geclusterter Index für die Ansicht erstellt wurde, wird die Ergebnismenge der Ansicht sofort materialisiert und im physischen Speicher der Datenbank persistiert, wodurch der Overhead für die Durchführung dieser kostspieligen Operation zur Ausführungszeit eingespart wird.
Zweitens können diese indizierten Ansichten funktionieren auch wenn sie nicht direkt von einer anderen Abfrage referenziert werden da der Optimierer sie gegebenenfalls anstelle eines Tabellenverweises verwendet.
Nochmals, die Dokumentation:
Die indizierte Ansicht kann bei der Ausführung einer Abfrage auf zwei Arten verwendet werden. Die Abfrage kann direkt auf die indizierte Ansicht verweisen, oder, was noch wichtiger ist, der Abfrageoptimierer kann die Ansicht auswählen, wenn er feststellt, dass die Ansicht einige oder alle Teile der Abfrage im kostengünstigsten Abfrageplan ersetzen kann. Im zweiten Fall wird der indizierte View anstelle der zugrunde liegenden Tabellen und ihrer normalen Indizes verwendet. Der View muss in der Abfrage nicht referenziert werden, damit der Abfrageoptimierer ihn während der Abfrageausführung verwenden kann. Dadurch können bestehende Anwendungen von den neu erstellten indizierten Ansichten profitieren, ohne dass diese Anwendungen geändert werden müssen.
Diese Dokumentation sowie Diagramme, die die Leistungsverbesserungen zeigen, finden Sie unter aquí .
Update 2: Die Antwort wurde mit der Begründung kritisiert, dass es der "Index" ist, der den Performancevorteil bietet, und nicht die "Ansicht". Dies ist jedoch leicht zu widerlegen.
Nehmen wir an, wir sind ein Softwareunternehmen in einem kleinen Land; ich werde Litauen als Beispiel nehmen. Wir verkaufen weltweit Software und speichern unsere Daten in einer SQL-Server-Datenbank. Wir sind sehr erfolgreich und haben in ein paar Jahren mehr als 1.000.000 Datensätze. Oft müssen wir jedoch Verkäufe für Steuerzwecke melden, und wir stellen fest, dass wir in unserem Heimatland nur 100 Exemplare unserer Software verkauft haben. Indem wir eine indizierte Ansicht nur der litauischen Datensätze erstellen, können wir die Datensätze, die wir benötigen, in einem indizierten Cache halten, wie in der MS-Dokumentation beschrieben. Wenn wir unsere Berichte für litauische Verkäufe im Jahr 2008 ausführen, durchsucht unsere Abfrage einen Index mit einer Tiefe von nur 7 (Log2(100) mit einigen ungenutzten Blättern). Würden wir dasselbe ohne die VIEW tun und uns nur auf einen Index in der Tabelle verlassen, müssten wir einen Indexbaum mit einer Suchtiefe von 21 durchlaufen!
Es ist klar, dass die Ansicht selbst uns einen Leistungsvorteil (3x) gegenüber der einfachen Verwendung des Index allein verschaffen würde. Ich habe versucht, ein reales Beispiel zu verwenden, aber Sie werden feststellen, dass eine einfache Liste der litauischen Verkäufe uns einen noch größeren Vorteil verschaffen würde.
Beachten Sie, dass ich für mein Beispiel nur einen geraden B-Baum verwende. Ich bin mir zwar ziemlich sicher, dass SQL Server eine Variante eines B-Baums verwendet, aber ich kenne die Details nicht. Nichtsdestotrotz gilt der Punkt.
Aktualisierung 3: Es ist die Frage aufgetaucht, ob eine indizierte Ansicht nur einen Index verwendet, der auf der zugrunde liegenden Tabelle platziert ist. Das heißt, um es so auszudrücken: "Eine indizierte Ansicht ist nur das Äquivalent eines Standardindexes und bietet nichts Neues oder Einzigartiges für eine Ansicht." Wenn dies wahr wäre, dann wäre die obige Analyse natürlich falsch! Lassen Sie mich ein Zitat aus der Microsoft-Dokumentation anführen, um zu verdeutlichen, warum ich diese Kritik für unberechtigt und falsch halte:
Die Verwendung von Indizes zur Verbesserung der Abfrageleistung ist kein neues Konzept. Indizierte Ansichten bieten jedoch zusätzliche Leistungsvorteile, die mit Standardindizes nicht erreicht werden können.
Zusammen mit dem obigen Zitat über die Persistenz von Daten im physischen Speicher und anderen Informationen in der Dokumentation darüber, wie Indizes auf Ansichten erstellt werden, denke ich, dass es sicher ist zu sagen, dass eine indizierte Ansicht ist no nur ein zwischengespeicherter SQL Select, der zufällig einen in der Haupttabelle definierten Index verwendet. Daher bleibe ich bei dieser Antwort.