2009-05-06 7 views

Antwort

7

Während ich versucht bin, mit "Nein" oder "Ich glaube nicht" zu antworten, ist der einzige Weg, um die Antwort auf diese Frage zu wissen, gehen Sie und messen Sie es selbst. Verwenden Sie einen Profiler wie JetBrains dotTrace und TOADs eigenen Profiler, um herauszufinden.

Alle anderen Antworten sind spekulativ.

2

Es wird schneller, wenn Sie Ihre gespeicherten Procs (PL/SQL-Pakete) so erstellen, dass weniger Daten zwischen der Datenbank und dem Client übertragen werden.

4

Es sollte sein. Wenn Sie Inline-SQL an die Datenbank senden, muss die Engine es analysieren und ausführen. Gespeicherte Prozeduren werden zum Zeitpunkt der Erstellung analysiert (und kompiliert). So gewinnst du wenigstens Parsing-Zeit.

+2

Wir hoffen, dass SQL, das von einer Anwendung übergeben wird, Bind-Variablen verwendet, und wiederholte Ausführungen werden daher nicht hart analysiert. Es mag angebracht sein zu sagen, dass das Binden von Variablen in PL/SQL gefördert wird, weil es so viel einfacher ist, sie nicht zu binden, daher wird eine bessere Praxis gefördert. –

3

Ich würde erwarten, dass gespeicherte Prozeduren in fast allen Fällen schneller sein werden.
Aber es hängt hauptsächlich von Ihrem Code ab.
Wenn Sie beispielsweise eine Ergebnismenge aus Ihrer Datenbank erhalten und diese Daten dann für andere Abfragen verwenden, haben Sie im Netzwerkverkehr einen hohen Aufwand. Dies gilt insbesondere, wenn Sie vergessen, eine einzige Verbindung für die Anfragen zu verwenden.
Es könnte dann effizienter sein, eine einzige gespeicherte Prozedur zu verwenden, um die aggregierten Daten zurückzugeben (wenn dies natürlich möglich ist).

0

Jon Limjap sagte: "Alle anderen Antworten sind spekulativ."

Es gibt viel Wahrheit zu dieser Aussage. Es gibt so viele Faktoren: Wie ist der DB-Server aufgebaut? Wie ist die Netzwerkgeschwindigkeit/Zuverlässigkeit? Wie ist das SQL? Wie ist das PL/SQL? Ich könnte wirklich langsames SQL und/oder PL/SQL schreiben, wenn ich (und unbeabsichtigt, auf vergangenen Projekten haben wollte). Also, wenn du kannst, probier beides aus.