Frage

Was ist schneller in SQL Server 2005/2008, eine gespeicherten Prozedur oder eine View?

EDIT: Wie viele von Ihnen erwähnt, ich bin es doch sehr vage. Lassen Sie mich versuchen, ein wenig mehr spezifisch.
Ich wollte den Unterschied in der Leistung für eine bestimmte Abfrage in einer Ansicht, im Vergleich zu der exakt gleichen Abfrage innerhalb einer gespeicherten Prozedur kennen. (Ich schätze immer noch alle Antworten, die ihre unterschiedlichen Fähigkeiten hinweisen)

War es hilfreich?

Lösung

Stored Procedures (SPs) und SQL-Ansichten sind verschieden "Tiere", wie in diesem Beitrag nicht mehrmals angegeben.

Wenn wir einige [Regel kleinere, mit Ausnahme von Randfälle] Leistungsüberlegungen im Zusammenhang mit dem Caching des Abfrageplans ausschließen, die Zeit, die mit einer gespeicherten Prozedur Bindung und solche, die beiden Ansätze sind im Großen und Ganzen gleichwertig , Performance-weise. jedoch ...

Ein Blick beschränkt sich auf das, was in einer einzigen SELECT-Anweisung ausgedrückt werden kann (gut, möglicherweise mit CTEs und ein paar andere Tricks), aber im Allgemeinen, eine Ansicht auf deklarative Formen von Abfragen gebunden ist . Eine gespeicherte Prozedur auf der anderen Seite können verschiedene Verfahrenstyp Konstrukte (sowie deklarative sind), und als ein Ergebnis, mit SPs verwenden, kann man Hand-Handwerk eine Möglichkeit, eine bestimmte Abfrage zu lösen die kann effizienter sein als das, was SQL-Server des Abfrageoptimierer (auf der Grundlage einer einzigen deklarativen Abfrage) getan haben kann. In diesen Fällen kann ein SPs viel schneller sein (aber Vorsicht ... die Optimierer ziemlich intelligent sind, und es braucht nicht viel, einen SP viel langsamer als die entsprechende Ansicht zu machen.)

Neben diesen Leistungsaspekten sind die SPs vielseitiger und ein breiteres Spektrum von Anfragen und Aktionen als die Ansichten ermöglichen.

Andere Tipps

Leider sind sie nicht die gleiche Art von Tier.

Eine gespeicherte Prozedur ist ein Satz von T-SQL-Anweisungen und CAN-Daten zurück. Es können alle Arten von Logik ausführen, und nicht unbedingt zurückkehren Daten in einem Suchresultates.

Eine Ansicht ist eine Darstellung von Daten. Es wird meist als eine Abstraktion von einer oder mehreren Tabellen verwendet, mit zugrunde liegenden verbindet. Es ist immer eine resultset von Null, einer oder mehreren Reihen.

Ich vermute, dass Ihre Frage nach dem Vorbild der mehr ist:

  

Welche ist schneller: aus einer Ansicht SELECTing, oder das Äquivalent SELECT Anweisung in einer gespeicherten Prozedur, da die gleichen Basistabellen Durchführung der verbindet sich mit dem gleichen where-Klauseln

Das ist nicht wirklich eine Frage beantwortbar, dass eine Antwort in allen Fällen der Fall sein wird. Da jedoch eine allgemeine Antwort für eine SQL-Server bestimmte implementaion ...

Im Allgemeinen ist eine Stored Procedure steht eine gute Chance, schneller zu sein als eine direkte SQL-Anweisung, da der Server alle möglichen Optimierungen macht, wenn eine gespeicherte Prozedur speichert und ausgeführt, um die erste Zeit.

Eine Ansicht ist im Wesentlichen eine gespeicherte SQL-Anweisung.

Daher würde ich sagen, dass in der Regel eine gespeicherte Prozedur wahrscheinlich sein wird schneller zu sein als eine Ansicht, wenn die SQL-Anweisung für jeden das gleiche ist, und wenn die SQL-Anweisung kann von Optimierungen profitieren. Ansonsten in der Regel würden sie in der Leistung ähnlich sein.

Das Bezugs diese Links Dokumentation meine Antwort zu unterstützen.

http://www.sql-server-performance.com/tips/ stored_procedures_p1.aspx

http://msdn.microsoft.com/en-us/library/ ms998577.aspx

Auch wenn Sie für alle Möglichkeiten suchen, die Leistung auf SQL Server zu optimieren, über die zweite Verbindung ist ein guter Anfang.

Ich ziehe gespeicherte Prozeduren aufgrund der größere Kontrolle über die Daten zulassen, wenn Sie ein gutes, sicheres modulares System aufbauen wollen, dann gespeicherte Prozeduren verwenden, kann es mehr SQL-Befehle ausführen, hat die Kontrolle-of-Flussrechnung und akzeptiert Parameter. Alles, was Sie können in einer Ansicht tun Sie in einer gespeicherten Prozedur tun können. Aber in einer gespeicherten Prozedur, können Sie mit viel mehr Flexibilität tun.

Kurz gesagt, auf Grund meiner Erfahrung in einigen komplexen Abfragen, Stored Procedure eine bessere Leistung als Funktion gibt.

Sie können aber nicht Ergebnisse der gespeicherten Prozedur in ausgewählten verwenden oder Join-Abfragen.

Wenn Sie nicht möchten, dass die Ergebnismenge in einer anderen Abfrage verwenden, besser SP zu verwenden.

Und Rest der Details und Unterschiede werden von Menschen in diesem Forum erwähnt und anderswo.

Stored Procedures und Views sind unterschiedlich und haben verschiedene Zwecke. Ich sehe Ansichten als Spam-Abfragen. Ich betrachte Stored Procedures als Codemodule.

Zum Beispiel: Angenommen, Sie haben eine Tabelle tblEmployees mit diesen beiden Spalten (ua) genannt: DateOfBirth und MaleFemale.

Eine Ansicht genannt viewEmployeesMale, die nur männliche Mitarbeiter ausfiltert können sehr nützlich sein. Eine Ansicht genannt viewEmployeesFemale ist auch sehr nützlich. Beide Ansichten sind selbst zu beschreiben und sehr intuitiv.

wir nun an, eine Liste aller männlichen Beschäftigten im Alter zwischen 25 produzieren müssen und 30. Ich neige dazu, würde eine gespeicherte Prozedur zu erstellen, dieses Ergebnis zu produzieren. Während es sicherlich als eine Ansicht gebaut werden konnte, ist eine gespeicherte Prozedur meiner Meinung nach besser geeignet für den Umgang mit diesem. Datum Manipulation insbesondere dort, wo Nullen sind ein Faktor kann sehr schwierig werden.

Ich glaube, dass eine andere Art des Denkens nutzen gespeicherte Prozeduren würden die Ansichten auszuwählen. Dies wird Ihre Architektur ein lose gekoppeltes System. Wenn Sie das Schema in der Zukunft zu ändern, werden Sie keine Sorgen zu machen ‚so‘ viel, dass es das vordere Ende zu brechen.

Ich denke, was ich sage vs Ansichten statt sp, denke sp und Ansichten:)

Ein paar andere Überlegungen: Während die Leistung zwischen einem SP und eine Ansicht im Wesentlichen gleich sind (da sie genau die gleiche Auswahl durchführen), die SP gibt Ihnen mehr Flexibilität für die gleiche Abfrage

.
  • Die SP unterstützt die Ergebnismenge der Bestellung; das heißt, einschließlich einer ORDER BY-Anweisung. Sie können nicht so in einer Ansicht tun.
  • Die SP ist vollständig zusammengestellt und erfordert nur eine exec es aufzurufen. Die Ansicht erfordert noch eine SELECT * FROM view es aufzurufen; das heißt, ein Auswahl auf der kompilierte wählt in der Ansicht.

Ich weiß, ich bin nicht machen dies zu einem „Gespräch“ sollte, aber ich bin sehr daran interessiert, diese und dachte, ich würde meine empirischen Beobachtungen einer bestimmten Situation, insbesondere in Bezug auf alle Kommentare teile oben die besagen, dass eine äquivalente SELECT-Anweisung ausgeführt innerhalb einer gespeicherten Prozedur und eine Ansicht sollte im Großen und Ganzen die gleiche Leistung hat.

Ich habe eine Ansicht in der Datenbank "A", die fünf Tabellen in einer separaten Datenbank verbindet (db "B"). Wenn ich anhängen „A“ in SSMS db und SELECT * aus der Sicht dauert es> 3 Minuten 250000 Reihen zurückzukehren. Wenn ich die select-Anweisung aus der Design-Seite der Ansicht nehmen und führen Sie es direkt in SSMS, dauert es <25 Sekunden. Putting die gleiche select-Anweisung in einer gespeicherten Prozedur gibt die gleiche Leistung, wenn ich diese Prozedur ausführen.

Ohne irgendwelche Beobachtungen über die absolute Performance zu machen (db „B“ ist eine AX-Datenbank, die wir nicht erlaubt zu berühren!), Ich bin nach wie vor davon überzeugt, dass ein SP in diesem Fall verwendet, ist eine Größenordnung schneller als die Verwendung von eine Ansicht auf die gleichen Daten abzurufen, und das gilt für viele andere ähnliche Ansichten in diesem speziellen Fall.

ich nicht denken es etwas gibt, mit dem Erstellen einer Verbindung zu dem anderen db zu tun, es sei denn durch eine Ansicht unter Verwendung kann es irgendwie nie die Verbindung zwischengespeichert werden, während der Auswahl tut, weil ich zwischen wechseln die 2 wählt in der gleichen SSMS Fenster wiederholt und die Leistung jeder Abfrage konsistent bleibt. Auch, wenn ich direkt anschließen „B“ auf den db und die Select ohne dbname.dbo läuft .... Refs, nimmt es die gleiche Zeit.

Alle Gedanken anyone?

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top