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?

0voto

l0st3d Punkte 2742

Für den speziellen Anwendungsfall, an den er denkt, mag er Recht haben. Eine gespeicherte Prozedur wird wahrscheinlich für einen komplexen Satz von SQL, der beliebig angepasst werden kann, schneller ausgeführt. Etwas, das Sie jedoch von Dingen wie Hibernate erhalten, ist das Caching. Dies kann sich während der gesamten Lebensdauer Ihrer Anwendung als wesentlich schneller erweisen.

0voto

FlySwat Punkte 165766

Durch die zusätzliche Abstraktionsebene wird es langsamer sein als ein reiner Sproc-Aufruf. Allein durch die Tatsache, dass Sie zusätzliche Zuweisungen auf dem verwalteten Heap und zusätzliche Pushes und Pops aus dem Callstack haben, ist es in Wahrheit effizienter, eine Sproc aufzurufen, als ein ORM die Abfrage erstellen zu lassen, unabhängig davon, wie gut das ORM ist.

Wie langsam, und ob es überhaupt messbar ist, ist fraglich. Dies wird auch durch die Tatsache unterstützt, dass die meisten ORMs einen Caching-Mechanismus haben, um die Abfrage überhaupt zu vermeiden.

0voto

Kibbee Punkte 64039

Selbst wenn die gespeicherte Prozedur 10 % schneller ist (was wahrscheinlich nicht der Fall ist), sollten Sie sich fragen, wie viel das wirklich ausmacht. Letztendlich kommt es darauf an, wie einfach es ist, Code für Ihr System zu schreiben und zu pflegen. Wenn Sie eine Webanwendung programmieren und Ihre Seiten alle in 0,25 Sekunden zurückkehren, dann ist die zusätzliche Zeit, die Sie durch die Verwendung von gespeicherten Prozeduren sparen, vernachlässigbar. Die Verwendung eines ORM wie NHibernate kann jedoch viele zusätzliche Vorteile mit sich bringen, die sich mit Stored Procedures nur schwer duplizieren lassen.

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