Welche ist schneller in SQL, While-Schleife, Rekursive Gespeicherte Prozedur oder Cursor?
Welche ist schneller in SQL, While-Schleife, Rekursive Gespeicherte Prozedur oder Cursor?
Ich möchte, um die Leistungsfähigkeit zu optimieren in ein paar stellen in einer gespeicherten Prozedur.
Der code, den ich bin der Optimierung von Formaten einige strings für die Ausgabe auf eine Datei.
InformationsquelleAutor der Frage Casey | 2010-06-11
Du musst angemeldet sein, um einen Kommentar abzugeben.
Nehme ich an, dass Sie SQL Server verwenden.
Zunächst einmal, wie jemand sagte, in den Aussagen, rekursive gespeicherte Prozeduren, obwohl es möglich ist, sind nicht eine gute Idee, in der SQL-Server wegen der stack-Größe. So, die Tiefe der rekursiven Logik zu brechen.
Allerdings, wenn Sie 2-3 Ebenen der Verschachtelung am besten, Sie könnten versuchen, mit Rekursion oder mit WAK, die auch ein bisschen rekursiv (SQL Server 2005 und höher). Sobald Sie verwalten, um Ihren Kopf herum wickeln etc, es ist eine enorm nützliche Technik.
Ich habe nicht gemessen, aber ich hatte noch nie performance-Probleme in der wenigen Orte, wo ich verwendet, CTE.
Cursor auf der anderen Seite sind die großen performance-Schweine, so dass ich (und das halbe internet) würde empfehlen, Sie nicht zu verwenden, die im code genannt wird oft. Aber wie Cursor sind eher eine klassische Programmierung Struktur, ähnlich einer
foreach
in C#, einige Leute finden es einfacher, zu betrachten, zu verstehen und zu verwalten SQL-code, der verwendet Cursor für Daten-manipulation, über einige komplizierte mit mehreren innen-SQL-select-Monstrosität, es ist also nicht die schlechteste Idee, die Sie im code aufgerufen wird, einmal in eine Weile.Apropos
while
es überträgt auch die Programmierung Denkweise von einem mengenbasierten, um ein Verfahren-basiert, also es ist zwar relativ schnell und verbraucht nicht viele Ressourcen, kann sich noch drastisch erhöhen die Anzahl der Daten-manipulation-Anweisungen, die Sie ausstellen, um die Datenbank selbst.Zusammenfassen, wenn ich hatte, um einen komplexen stored proc, bei denen die Leistung ist von größter Bedeutung, ich würde versuchen:
in dieser Reihenfolge.
Wenn der code verwendet wird, viel weniger oft, werde ich wahrscheinlich verschieben, 3 und 4, die vor dem 1 und 2, aber wieder nur für komplexe Szenarien, in denen viele Tische und viele Beziehungen. Natürlich, YMMV, also würde ich testen, was auch immer Verfahren habe ich in einem real-world-Szenario, um tatsächlich zu Messen, die Leistung, da können wir reden, bis wir blau im Gesicht sind, über diese ist schnell, und das ist langsam, aber bis Sie sich echte Messungen, es gibt keine Möglichkeit zu sagen, ob änderungen sind die Dinge besser oder schlechter.
Und, nicht zu vergessen, der code ist nur so schnell wie Ihre Daten. Es gibt keinen Ersatz für eine gute Indizierung.
InformationsquelleAutor der Antwort SWeko
D) Keine der obigen.
Einen set-basierten Methode werden fast immer die Schnellste Methode. Ohne zu wissen, was Ihre eigentliche code ist (oder eine gute Annäherung) es ist schwer zu sagen, ob oder nicht, dass ist möglich oder welche Methode wäre am schnellsten.
Ihre beste Wette ist, um zu testen, alle möglichen Methoden, die Sie haben und sehen, welche wirklich die Schnellste.
InformationsquelleAutor der Antwort Tom H
Wenn Sie möchten, um die Leistung zu verbessern, dann müssen Sie schauen, SET based operations. While-Schleife und der cursor ist im Grunde die gleiche Sache. SQL arbeitet in Gruppen ist nicht eine prozedurale Sprache verwenden, wie es verwendet werden soll,
InformationsquelleAutor der Antwort SQLMenace
Werfen Sie einen Blick auf Cursor und Wie Sie zu Vermeidendie Ihnen Ideen, wie Sie zu ersetzen Cursor mit " SET based operations
InformationsquelleAutor der Antwort SQLMenace
Rekursive gespeicherte Prozedur wird wahrscheinlich langsamste, while-Schleife und Cursor sind nicht gegenseitig exklusiv. Cursor-Operationen sind ziemlich schnell (IME), aber ich habe immer nur diese benutzt aus externen (nicht-SQL -) code. Der andere Poster korrekt sind, wenn Sie tun können, Ihre Verarbeitung in einem Satz-orientierte Art und Weise erhalten Sie die beste Leistung.
InformationsquelleAutor der Antwort TMN
Gibt es eine 3-teilige blog-post über Cursor, das ist Wert, gelesen zu werden, wenn Sie die Zeit haben. Auch ich meide Sie wie die Pest, aber dieser blog hat mich zu sehen, wie Sie in einem anderen Licht... naja... ich schade Ihnen leicht, jetzt aber immer noch nicht!
Die Wahrheit Über Cursor
InformationsquelleAutor der Antwort james lewis
Sie weiß es noch nicht, aber Sie wollen um dieses Buch zu Lesen.
http://www.amazon.com/Refactoring-SQL-Applications-Stephane-Faroult/dp/0596514972
InformationsquelleAutor der Antwort Marco Mariani