2009-02-22 5 views

Antwort

3

Laut Microsoft gibt es eine Performance-Vorteil, wenn Sie indizierte Ansichten in SQL Server 2000/2005/2008 verwenden.

Indizierte Sichten können die Abfrageleistung auf folgende Arten erhöhen
1. Aggregationen können im Voraus berechnet und im Index gespeichert werden, um teure Berechnungen während der Abfrageausführung zu minimieren.
2. Tabellen können vorgemischt und der resultierende Datensatz gespeichert werden.
3. Kombinationen von Joins oder Aggregationen können gespeichert werden

Aber genauso wie Indizes auf Tabellen, Indizes auf Ansichten Erfahrung Modifikationsaufwand. Fügen Sie also nur dann einen Index zu einer Ansicht hinzu, wenn der Vorteil seiner Geschwindigkeit beim Ausführen die Zeit übersteigt, die zum Aktualisieren des Index der Ansicht benötigt wird.

Die folgenden Links geben weitere Informationen dazu (wann wann was zu verwenden ist).

  1. SQL Server 2000/2005 Indexed View Performance Tuning and Optimization Tips.
  2. Improving Performance with SQL Server 2000 Indexed View.
  3. See performance gains by using indexed views in SQL.
+2

Wenn Sie diesen Artikel genau lesen, werden Sie sehen, dass es sich um "materialisierte Ansichten" handelt, die wirklich ein anderes Tier sind, das wirklich eine spezielle Form von Tisch schafft. – dkretz

1

In den meisten Datenbanken sind sie funktional austauschbar (abgesehen von materialisierten Ansichten, die ohnehin etwas völlig anderes sind). Es gibt zwei häufige Gründe für das Erstellen von Ansichten. 1. Ein Abstraktions (und Spalten-Aliasing) -Mechanismus und 2. Für Berechtigungen und Zugriffskontrolle. Aber was die Effizienz betrifft, ist das kein Problem.

+1

Nicht wahr. Bei einigen Datenbanken treten Leistungsprobleme auf, wenn Ansichten verschachtelt sind. –

+0

Und haben Sie Referenzen? Das scheint sehr unwahrscheinlich, (obwohl ich deshalb in den meisten Datenbanken gesagt habe.) – dkretz

+0

Ja. In Oracle können sich verschachtelte Views schlecht verhalten. Wir haben dies selbst erlebt, als wir erweiterte Abfragen mit denselben Abfragen verglichen haben, die als mehrere Ansichten in Oracle definiert wurden. –

0

Betrachten Sie es auf diese Weise:

Eine Ansicht ist nur eine select-Anweisung, die auf dem Server lebt und von der SQL-Engine erstellt.

Normalerweise werden Ansichten verwendet, um die Ergebnisse aus der Tabelle zu begrenzen/zu vereinfachen.

Grüße K

1

Es hängt von der Datenbank und die Definition der Ansicht.

Eine einfache Ansicht, die Aliase Spalten oder einfache Berechnungen durchführt unterscheidet sich nicht von der direkten Abfrage.

In einigen Fällen können die Ansichten jedoch wesentlich langsamer sein. Ein Beispiel: Wenn Sie in Oracle View-Abfragen zu sehr verschachteln (z. B. eine Ansicht verwendet eine andere als Tabelle, die eine andere verwendet, usw.), können Sie eine schreckliche Leistung erzeugen.

Im Allgemeinen müssen Sie mit der spezifischen Datenbank und den fraglichen Abfragen testen.

+0

Sind Sie der Ansicht, dass die Verwendung der Ansicht Ihre Abfrage langsamer macht als den Inline-Subselect, den sie repräsentiert? – Khb

+0

Wenn es ineffizient ist, würde ich wetten, dass dies daran liegt, dass die Ansichten unangemessen mehr Felder und/oder Joins hinzufügen, als benötigt werden. Aber es ist immer noch die gleiche Leistung wie die entsprechende einzelne SQL-Anweisung. – dkretz

+1

Nein, wir haben versucht, die SAME-Abfragen nur in Sichten oder in Auswahl mit Unterabfragen zu verwenden. Letzteres kann viel schneller sein. Warum? Keine Ahnung, Orakel ist voller Geheimnisse und nicht auf eine gute Art und Weise. –