16 Stimmen

Warum ist parametrisiertes SQL, das von NHibernate generiert wird, genauso schnell wie eine Stored Procedure?

Einer meiner Mitarbeiter behauptet, dass parametrisiertes SQL, das von einem ORM generiert wird, auf keinen Fall so schnell ist wie eine gespeicherte Prozedur, auch wenn der Ausführungspfad zwischengespeichert wird. Können Sie diesem hartnäckigen Entwickler helfen?

1voto

Boris Terzic Punkte 10608

Messen Sie es, aber in einem Nicht-Mikro-Benchmark, d.h. etwas, das reale Vorgänge in Ihrem System repräsentiert. Selbst wenn es einen winzigen Leistungsvorteil für eine gespeicherte Prozedur gäbe, wäre dieser im Vergleich zu den anderen Kosten, die Ihr Code verursacht, unbedeutend: tatsächliches Abrufen von Daten, Konvertierung, Anzeige usw. Ganz zu schweigen davon, dass die Verwendung von gespeicherten Prozeduren dazu führt, dass Ihre Logik über Ihre Anwendung verteilt wird. et Ihre Datenbank ohne nennenswerte Versionskontrolle, Unit-Tests oder Refactoring-Unterstützung in letzterer.

1voto

matt b Punkte 135206

Bewerten Sie es selbst. Schreiben Sie eine Testbed-Klasse, die eine gesampelte gespeicherte Prozedur ein paar hundert Mal ausführt, und führen Sie den NHibernate-Code genauso oft aus. Vergleichen Sie die durchschnittliche und mittlere Ausführungszeit der einzelnen Methoden.

1voto

Eric Z Beard Punkte 36325

Genauso schnell geht es, wenn die Abfrage jedes Mal dieselbe ist. SQL Server 2005 speichert Abfragepläne auf der Ebene jeder Anweisung in einem Stapel, unabhängig davon, woher die SQL-Anweisungen stammen.

Der langfristige Unterschied könnte darin bestehen, dass gespeicherte Prozeduren für einen DBA um ein Vielfaches einfacher zu verwalten und zu optimieren sind, während Hunderte von verschiedenen Abfragen, die aus Profiler-Traces gewonnen werden müssen, ein Alptraum sind.

1voto

DevelopingChris Punkte 38437

Ich habe dieses Argument schon oft gehört.
Fast immer nehme ich am Ende einen wirklich guten DBA und führe einen Proc und ein Stück Code mit laufendem Profiler aus und bekomme den DBA dazu, zu zeigen, dass die Ergebnisse so nah beieinander liegen, dass sie vernachlässigbar sind.

0voto

Johannes Passing Punkte 2406

Messen Sie es.

Jede Diskussion über dieses Thema ist wahrscheinlich sinnlos, solange man es nicht gemessen hat.

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