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?

12voto

Espo Punkte 40386

Ich würde damit beginnen, diesen Artikel zu lesen:

http://decipherinfosys.wordpress.com/2007/03/27/using-stored-procedures-vs-dynamic-sql-generated-by-orm/

Hier ist ein Geschwindigkeitstest zwischen den beiden:

http://www.blackwasp.co.uk/SpeedTestSqlSproc.aspx

8voto

Gulzar Nazim Punkte 51098

Runde 1 - Sie können einen Profiler-Trace starten und die Ausführungszeiten vergleichen.

5voto

NotMe Punkte 86089

Ich würde nur ein paar Dinge zu Robs Antwort hinzufügen:

Erstens: Stellen Sie sicher, dass die Datenmenge der Testfälle den Produktionswerten entspricht. Mit anderen Worten: Wenn Ihre Abfragen normalerweise gegen Tabellen mit Hunderttausenden von Zeilen gerichtet sind, sollten Sie eine solche Testumgebung erstellen.

Zweitens, machen Sie alles andere gleich, außer der Verwendung einer von nHibernate generierten Abfrage und eines s'proc-Aufrufs. Hoffentlich können Sie den Test ausführen, indem Sie einfach einen Anbieter austauschen.

Schließlich sollten Sie sich darüber im Klaren sein, dass in der Regel viel mehr auf dem Spiel steht als nur Stored Procedures vs. ORM. In diesem Sinne sollte der Test alle Faktoren berücksichtigen: Ausführungszeit, Speicherverbrauch, Skalierbarkeit, Debugging-Fähigkeit, usw.

5voto

rjzii Punkte 13932

Die meisten Menschen lassen sich am besten überzeugen, wenn sie "den Beweis" antreten. In diesem Fall würde ich ein paar einfache Testfälle erstellen, um denselben Datensatz abzurufen, und dann die Zeit messen, die die Verwendung von Stored Procedures im Vergleich zu NHibernate benötigt. Sobald Sie die Ergebnisse vorliegen haben, übergeben Sie diese und die meisten skeptischen Leute werden den Beweisen nachgeben.

2voto

Joel Coehoorn Punkte 377088

Das Problem dabei ist, dass Sie die Beweislast akzeptiert haben. Es ist unwahrscheinlich, dass Sie jemanden auf diese Weise umstimmen können. Ob es Ihnen gefällt oder nicht, die Menschen - selbst Programmierer - sind einfach zu emotional, um sich leicht von Logik umstimmen zu lassen. Sie müssen die Beweislast wieder auf ihn abwälzen - bringen Sie ihn dazu, Sie vom Gegenteil zu überzeugen - und das wird ihn dazu zwingen, zu recherchieren und die Antwort selbst zu finden.

Ein besseres Argument für die Verwendung von gespeicherten Prozeduren ist die Sicherheit. Wenn Sie nur gespeicherte Prozeduren, mit keine dynamic sql können Sie SELECT-, INSERT-, UPDATE-, DELETE-, ALTER- und CREATE-Berechtigungen für den Benutzer der Anwendungsdatenbank deaktivieren. Dies schützt Sie vor den meisten SQL-Injections zweiter Ordnung, während parametrisierte Abfragen nur gegen Injektionen erster Ordnung wirksam sind.

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