2010-03-22 3 views
9

Ich habe eine Anwendung, die ich in Zugriff mit einem SQL Server-Backend schreibe. Einer der am meisten verwendeten Teile ist, wo der Benutzer eine Antwort auf eine Frage auswählt, eine gespeicherte Prozedur wird dann ausgelöst, die sieht, ob eine Antwort bereits gegeben wurde, ob ein UPDATE ausgeführt wird, wenn kein INSERT ausgeführt wird.MERGE vs. UPSERT

Das funktioniert gut, aber jetzt haben wir auf SQL Server 2008 Express aktualisiert. Ich frage mich, ob es besser/schneller/effizienter wäre, diesen SP neu zu schreiben, um den neuen MERGE-Befehl zu verwenden.

Hat jemand eine Idee, wenn dies schneller ist als ein SELECT gefolgt von einem INSERT oder UPDATE?

Antwort

2

Nicht die Mühe wert. Möglicherweise machbar, aber es wird Ihnen nichts Bemerkenswertes geben.

MERGE richtet sich speziell an Data Warehouses, bei denen das Herausfinden, was einzufügen/zu aktualisieren ist, der knifflige Teil ist. Es ermöglicht, dass alle Operationen (Einfügen, Aktualisieren) mit EINEM Satz von Zusammenführungen durchgeführt werden, verglichen mit einem für jede Bedingung. Dies macht in Ihrem Fall keinen wirklichen Unterschied.

Ich habe eine Datenbank, wo ich 3-5 Millionen Zeilen in eine 300 Millionen Zeile Tabelle hochladen - dort Zusammenführen verbessert meine Leistung um 50% (ein Table Scan statt zwei).

+1

Es ist ein fairer Punkt und während ich nicht an der Spitze tue, um es zu tun, denke ich, wenn es erhöhte Leistung bietet, wie Sie sagten, dann könnte es in einer Episode von "Micro Optimization Theater" Feature, wenn ich etwas schlaffe Zeit bekommen im Projekt und muss beschäftigt aussehen –

+10

"MERGE zielt speziell auf Data Warehouses" - klingt für mich wie Unsinn. – onedaywhen