2009-04-24 4 views
2

Sicherlich gibt es eine Art von Kontextwechsel, Marshalling, Serialisierung usw., die stattfindet, wenn Sie eine gespeicherte Prozedur in NET vs T/SQL schreiben.Welcher Aufwand ist mit gespeicherten .NET-Prozeduren verbunden, die auf SQL Server ausgeführt werden?

Gibt es irgendwelche Fakten zu diesem Overhead, wenn es darum geht, eine Entscheidung über die Verwendung von .NET vs. T/SQL für gespeicherte Prozeduren zu treffen?

Welche Faktoren verwenden Sie, um die Entscheidung zu treffen?

Für mich ist die Entwicklung in C# aufgrund meiner Lernkurve 1000% schneller als die Entwicklung in T/SQL, aber wann wird der Leistungseinbruch (wenn es überhaupt einen gibt) nicht ausgeglichen?

+0

keine Kritik und nicht relevant für die Frage, aber wenn Sie 1000% schneller in C# sind, dann lohnt es sich wahrscheinlich einige Zeit auf Ihre Lernkurve zu verbringen. SPs sind in der Regel 80% SQL, die Sie in beide Richtungen benötigen. – dkretz

+0

@le dorfier - Ich bin extrem gut in komplexen sql, nur nicht die t/sql Möglichkeiten zu erklären, Bedingungen, Zuordnung, Schleifen, Cursor, etc ... Da ich es nicht so oft mache, finde ich mich müssen jedes Mal einfache t/sql Beispiele nachschlagen. – TheSoftwareJedi

Antwort

2

Ich würde sagen, es kommt darauf an.

Einige Dinge, die Sie CLR procedres finden verwenden, sind besser

  1. Verwendung von nativen .NET-Objekte - Dateisystem, Netzwerk, etc
  2. Funktionen, die nicht von TQL oder nicht so gut wie .NET e angeboten .g reguläre Ausdrücke

Für noch andere Sie TSQL Verfahren sind besser, entweder im Hinblick auf die Benutzerfreundlichkeit oder roh Ausführungsgeschwindigkeit

  1. Mit Satz basierte Logik (wo abc in def oder abc nicht finden in ghi)
  2. CRUD-Operationen
2

Der Overhead ist in Bezug auf Switching, Marshalling usw. irrelevant, es sei denn ... Ihre Daten sind nicht bereits in der Datenbank vorhanden.

Das heißt, ich neigen dazu, fast keine gespeicherten Prozeduren tun so viel wie möglich mit T-SQL - in einem ORM gewickelt.

Wirklich, das ist die Antwort für dort. Schauen Sie sich Entity Framework, NHibernate, Linq To SQL usw. an. Vergessen Sie nicht, gespeicherte Procs zu schreiben (ich kann jetzt die Down-Votes hören), und tun Sie es mit C#.

EDIT: Weitere Informationen Gespeicherte Procs sind schwer zu testen (inhärent datengebunden), sie bieten keine Geschwindigkeitsvorteile gegenüber dynamischen SQL, und sind wirklich nicht mehr sicher. Das heißt, für Dinge wie Sortieren und Filtern ist eine relationale Datenbank effizienter als C#.

Wenn Sie jedoch gespeicherte Prozeduren verwenden müssen (und es gibt Zeiten), verwenden Sie TSQL so oft wie möglich. Wenn Sie eine wesentliche Menge an Logik haben, die ausgeführt werden muss, die nicht auf Basis gesetzt ist, dann brechen Sie C# aus.

Die eine Zeit, die ich das tat, war, einige zusätzliche Datenverarbeitung zu meiner Datenbank hinzuzufügen. Die Firma, in der ich war, nutzte einen 5-4-4 wöchentlichen Finanzkalender. Das war in SQL fast unmöglich. Also habe ich C# dafür benutzt.

+1

Sie haben falsch gehört. Eine Aufwertung kommt auf! ;-) – Cerebrus

+1

Also ist deine offizielle Antwort auf meine Frage "verwende keine gespeicherten Prozeduren"? Das ist keine große Antwort. – TheSoftwareJedi

+0

scheinen sie sich gegenseitig auszulöschen. :) Für alle anderen scheint es die streitsüchtigste Sache zu sein, auf dieser Seite etwas zu tun. –

1

Es ist eine Art religiöser Frage, aber es kann erhebliche Unterschiede geben, je nachdem, was Sie tun, Ihr Schema und wie viele Datensätze Sie damit machen. Testen ist wirklich der beste Weg, um herauszufinden, für Ihre Umstände.

Im Allgemeinen werden gespeicherte Daten besser skaliert; aber das mag in Ihrem Fall nicht wahr sein, oder das ist für Sie nicht wichtig.

Verwandte Themen