452 Stimmen

Ist eine Ansicht schneller als eine einfache Abfrage?

Ist ein

select *  from myView

schneller als die Abfrage selbst, um die Ansicht zu erstellen (um die gleiche Ergebnismenge zu erhalten):

select * from ([query to create same resultSet as myView])

?

Es ist mir nicht ganz klar, ob die Ansicht eine Art Zwischenspeicherung verwendet, die sie im Vergleich zu einer einfachen Abfrage schneller macht.

1voto

kta Punkte 18216

Meiner Meinung nach ist die Verwendung der Ansicht ein wenig schneller als eine normale Abfrage. Mein gespeicherte Prozedur dauerte etwa 25 Minuten (ich arbeitete mit verschiedenen größeren Datensätzen und mehreren Joins), und nachdem ich die Ansicht (ohne Cluster) verwendet hatte, war die Leistung nur geringfügig schneller, aber nicht signifikant. Ich musste einige andere Techniken/Methoden zur Abfrageoptimierung anwenden, um eine deutliche Veränderung zu erzielen.

1voto

Abnous Nayyeri Punkte 1065

Die Auswahl aus einer Ansicht oder aus einer Tabelle ist nicht sehr sinnvoll.

Natürlich nur, wenn die Ansicht keine unnötigen Joins, Felder usw. enthält. Sie können den Ausführungsplan Ihrer Abfragen, Joins und Indizes überprüfen, um die Leistung der Ansicht zu verbessern.

Sie können sogar einen Index für Ansichten erstellen, um die Suche zu beschleunigen. http://technet.microsoft.com/en-us/library/cc917715.aspx

Aber wenn Sie wie '%...%' suchen, dann profitiert die Sql-Engine nicht von einem Index auf der Textspalte. Wenn Sie Ihre Benutzer dazu zwingen können, nach '...%' zu suchen, wird das schnell sein.

auf die Antwort in den Asp-Foren verwiesen: https://forums.asp.net/t/1697933.aspx?Which+ist+schneller+bei+der+Verwendung von+SELECT+Abfrage+VIEW+oder+Table+

1voto

Ian Punkte 257

Entgegen allen Erwartungen sind die Ansichten unter bestimmten Umständen viel langsamer.

Ich habe dies vor kurzem entdeckt, als ich Probleme mit Daten hatte, die aus Oracle gezogen wurden und in ein anderes Format umgewandelt werden mussten. Vielleicht 20k Quellzeilen. Eine kleine Tabelle. Dazu importierten wir die Oracle-Daten so unverändert wie möglich in eine Tabelle und verwendeten dann Ansichten, um Daten zu extrahieren. Wir hatten sekundäre Ansichten, die auf diesen Ansichten basierten. Vielleicht 3-4 Ebenen von Ansichten.

Eine der letzten Abfragen, bei der vielleicht 200 Zeilen extrahiert wurden, dauerte über 45 Minuten! Diese Abfrage basierte auf einer Kaskade von Ansichten. Vielleicht 3-4 Ebenen tief.

Ich könnte jede der fraglichen Ansichten nehmen, ihre Sql in eine verschachtelte Abfrage einfügen und sie in ein paar Sekunden ausführen.

Wir fanden sogar heraus, dass wir jede Ansicht in eine temporäre Tabelle schreiben und diese anstelle der Ansicht abfragen konnten, und es war immer noch viel schneller als die Verwendung von verschachtelten Ansichten.

Was noch merkwürdiger war, war, dass die Leistung in Ordnung war, bis wir eine bestimmte Anzahl von Quellzeilen erreichten, die in die Datenbank gezogen wurden, und dass die Leistung innerhalb weniger Tage von einer Klippe abfiel - ein paar weitere Quellzeilen waren alles, was es brauchte.

Die Verwendung von Abfragen, die auf Ansichten zurückgreifen, die wiederum auf Ansichten zurückgreifen, ist also viel langsamer als eine verschachtelte Abfrage - was für mich keinen Sinn macht.

0voto

keithwarren7 Punkte 13828

In der Praxis gibt es keinen Unterschied, und wenn Sie BOL lesen, werden Sie feststellen, dass Ihr einfaches altes SQL SELECT * FROM X die Vorteile des Plan-Caching usw. nutzt.

0voto

Der Zweck einer Ansicht besteht darin, die Abfrage immer wieder zu verwenden. Zu diesem Zweck stellen SQL Server, Oracle usw. in der Regel eine "zwischengespeicherte" oder "kompilierte" Version Ihrer Ansicht zur Verfügung und verbessern so deren Leistung. Im Allgemeinen sollte die Leistung besser sein als bei einer "einfachen" Abfrage, aber wenn die Abfrage wirklich sehr einfach ist, können die Vorteile vernachlässigbar sein.

Wenn Sie nun eine komplexe Abfrage durchführen, erstellen Sie die Ansicht.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X