Ja , Ansichten kann ein Clustered-Index zugewiesen werden. In diesem Fall werden temporäre Ergebnisse gespeichert, die die resultierenden Abfragen beschleunigen können.
Update: Mindestens drei Leute haben mich in diesem Fall abgelehnt. Bei allem Respekt denke ich, dass sie einfach falsch sind; Die Microsoft-eigene Dokumentation macht sehr deutlich, dass Ansichten die Leistung verbessern können.
Erstens werden einfache Ansichten an Ort und Stelle erweitert und tragen so nicht direkt zur Leistungsverbesserung bei - so viel ist wahr. Allerdings indizierte Sichten können dramatisch die Leistung verbessern.
Lassen Sie mich direkt zur Dokumentation gehen:
Nachdem ein eindeutiger Clustered-Index für die Ansicht erstellt wurde, wird die Ergebnismenge der Ansicht sofort materialisiert und im physischen Speicher in der Datenbank gespeichert, wodurch der Aufwand für die Ausführung dieser kostspieligen Operation zur Ausführungszeit gespart wird.
Zweitens können diese indizierten Ansichten auch dann funktionieren , wenn sie nicht direkt von einer anderen Abfrage referenziert werden da der Optimierer sie gegebenenfalls anstelle einer Tabellenreferenz verwendet.
Wieder die Dokumentation:
Die indizierte Ansicht kann auf zwei Arten in einer Abfrageausführung 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 Abfragen im Abfrageplan mit den niedrigsten Kosten ersetzen kann. Im zweiten Fall wird die indizierte Ansicht anstelle der zugrunde liegenden Tabellen und ihrer normalen Indizes verwendet. Die Ansicht muss in der Abfrage nicht referenziert werden, damit das Abfrageoptimierungsprogramm sie während der Abfrageausführung verwendet. Auf diese Weise können vorhandene Anwendungen von den neu erstellten indizierten Ansichten profitieren, ohne diese Anwendungen zu ändern.
Diese Dokumentation sowie Diagramme mit Leistungsverbesserungen finden Sie hier .
Update 2: Die Antwort wurde mit der Begründung kritisiert, dass der "Index" den Leistungsvorteil bietet, nicht die "Ansicht". Dies kann jedoch leicht widerlegt werden.
Nehmen wir an, wir sind ein Softwareunternehmen in einem kleinen Land. Ich werde Litauen als Beispiel nehmen. Wir verkaufen weltweit Software und speichern unsere Aufzeichnungen in einer SQL Server-Datenbank. Wir sind sehr erfolgreich und haben in einigen Jahren mehr als 1.000.000 Datensätze. Wir müssen jedoch häufig steuerliche Umsätze melden und 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 benötigten Datensätze in einem indizierten Cache aufbewahren, wie in der MS-Dokumentation beschrieben. Wenn wir 2008 unsere Berichte für litauische Verkäufe erstellen, durchsucht unsere Abfrage einen Index mit einer Tiefe von nur 7 (Log2 (100) mit einigen nicht verwendeten Blättern). Wenn wir dasselbe ohne VIEW tun würden und uns nur auf einen Index in der Tabelle verlassen würden, müssten wir einen Indexbaum mit einer Suchtiefe von 21 durchlaufen!
Die Ansicht selbst würde uns eindeutig einen Leistungsvorteil (3x) gegenüber der einfachen Verwendung des Index allein verschaffen. Ich habe versucht, ein Beispiel aus der Praxis 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. Obwohl ich ziemlich sicher bin, dass SQL Server eine Variante eines B-Baums verwendet, kenne ich die Details nicht. Trotzdem gilt der Punkt.
Update 3: Es stellt sich die Frage, ob in einer indizierten Ansicht nur ein Index verwendet wird, der in der zugrunde liegenden Tabelle platziert ist. Das heißt, um es zu paraphrasieren: "Eine indizierte Ansicht entspricht nur einem Standardindex und bietet nichts Neues oder Einzigartiges für eine Ansicht." Wenn dies natürlich wahr wäre, wäre die obige Analyse falsch! Lassen Sie mich ein Zitat aus der Microsoft-Dokumentation zitieren, das zeigt, warum ich diese Kritik für ungültig oder wahr 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 zur Persistenz von Daten im physischen Speicher und anderen Informationen in der Dokumentation darüber, wie Indizes in Ansichten erstellt werden, kann man mit Sicherheit sagen, dass eine indizierte Ansicht nicht nur eine zwischengespeicherte SQL-Auswahl ist, die zufällig eine verwendet Index in der Haupttabelle definiert. Daher stehe ich weiterhin zu dieser Antwort.