5 Stimmen

Was ist die effizienteste / beste Praxis zu Upsert 5000+ Zeilen ohne Merge in SQL Server?

Ich habe eine Webanwendung, die etwa 50 Zugriffe pro Sekunde erhält, und bei jedem Zugriff werden etwa 10 Datensätze in eine zentrale SQL Server-Datenbank eingefügt. Ungefähr alle 3 Sekunden füge ich mehr als 5000 Zeilen für eine einzige eingehende Verbindung ein.

Derzeit habe ich eine gespeicherte Prozedur, die XML als Parameter nimmt. Ich führe ein INSERT in meine Haupttabelle aus meiner XML aus, wenn ein Zeilenfeld nicht übereinstimmt, und aktualisiere dann die gesamte Tabelle mit Werten aus meiner XML.

Der Vorgang ist keineswegs langsam, aber ich würde wirklich gerne wissen, wie man das am besten macht. Ich verwende SQL Server 2005 und habe daher nicht die MERGE-Operation.

6voto

gbn Punkte 407102

Ich würde das UPDATE zuerst machen, sonst aktualisieren Sie die Zeilen, die Sie gerade eingefügt haben

SELECT .. INTO #temp FROM (shredXML)

BEGIN TRAN

UPDATE ... FROM WHERE (matches using #temp)

INSERT ... SELECT ... FROM #temp WHERE NOT EXISTS

COMMIT

Ich würde auch erwägen, die XML-Datei in eine temporäre Tabelle zu ändern und SQLBulkCopy zu verwenden. Wir haben festgestellt, dass dies effizienter ist als das Parsen von XML im Allgemeinen für mehr als ein paar hundert Zeilen. Wenn Sie das nicht ändern können, schreddern Sie dann das XML zuerst in eine temporäre Tabelle?

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