2008-10-16 11 views
7

Mögliche Duplizieren:
Are Stored Procedures more efficient, in general, than inline statements on modern RDBMS's?Sind Verfahren schneller für einfache Abfragen gespeichert

Wenn ich eine gespeicherte Prozedur für grundlegende Abfragen bin Ausführung, wie zB:

SELECT ColA, ColB FROM MyTable WHERE ID = 123; 
SELECT * FROM MyTable,OtherTable WHERE MyTable.ID = OtherTable.ID ORDER BY CreatedAt desc 

Gibt es eine Vorteil, diese Abfragen in eine gespeicherte Prozedur zu konvertieren, wenn sie häufig ausgeführt werden? Wann ist es besser, eine gespeicherte Beschaffung zu verwenden? Wann sollte ich nicht eine gespeicherte Prozedur verwenden?

Welche Art von Optimierungen treten möglicherweise auf, wenn Sie eine gespeicherte Prozedur erstellen und ausführen? Können Sie mir irgendwelche Ressourcen empfehlen, die mir helfen zu verstehen, wann und warum ich sie benutzen sollte?

Wenn es irgendwelche Unterschiede macht, ist meine Datenbank eine MS SQL 2005 db.

Antwort

12

Gründe für die Verwendung von gespeicherten Prozeduren:

  • Netzwerkverkehr reduzieren - Sie haben die SQL-Anweisung über das Netzwerk zu senden. Mit Sprocs können Sie SQL in Batches ausführen, was auch effizienter ist.
  • Caching-Abfrageplan - Wenn der Sproc zum ersten Mal ausgeführt wird, erstellt SQL Server einen Ausführungsplan, der zur Wiederverwendung zwischengespeichert wird. Dies ist insbesondere für kleine Abfragen, die häufig ausgeführt werden, performant.
  • Möglichkeit, Ausgabeparameter zu verwenden - Wenn Sie Inline-SQL senden, die eine Zeile zurückgibt, können Sie nur ein Re-Cord-Set abrufen. Mit Sprocs können Sie sie als Ausgabeparameter zurückbekommen, was erheblich schneller ist.
  • Berechtigungen - wenn Sie Inline-SQL senden, müssen Sie Berechtigungen für die Tabelle (n) an den Benutzer gewähren, die viel mehr Zugang als nur die Gewährung Erlaubnis gewährt eine sproc
  • Trennung von Logik auszuführen - Entfernen Sie den SQL-generierenden Code und trennen Sie ihn in der Datenbank.
  • Fähigkeit zu bearbeiten, ohne erneut zu kompilieren - das kann umstritten sein. Sie können das SQL in einem Sproc bearbeiten, ohne die Anwendung neu kompilieren zu müssen.
  • Finden, wo eine Tabelle verwendet wird - Wenn Sie mit sprocs alle SQL-Anweisungen finden möchten, die auf eine bestimmte Tabelle verweisen, können Sie den Sproc-Code exportieren und danach suchen. Dies ist viel einfacher als der Versuch, es im Code zu finden.
  • Optimierung - Es ist einfacher für einen DBA, die SQL zu optimieren und die Datenbank zu optimieren, wenn Sprocs verwendet werden. Es ist einfacher, fehlende Indizes und ähnliches zu finden.
  • SQL-Injection-Angriffe - richtig geschriebene Inline-SQL kann sich gegen Angriffe schützen, aber Sprocs sind besser für diesen Schutz.
+0

Ausgezeichnete Punkte. Ich wünsche mir insbesondere, dass mehr Programmierer erkennen würden, wie schädlich ihre Datenbanken sind, wenn sie Berechtigungen auf Tabellenebene setzen. – HLGEM

+1

Scary, nicht wahr?Wenn ich es richtig verstehe, erhöhen viele Linq-Operationen, die generiertes SQL anstelle von gespeicherten Prozeduren verwenden, nur die Praxis des direkten Tabellenzugriffs. Mach weiter deine Nachricht raus! – DOK

Verwandte Themen