2 Stimmen

SQL Server 2008 INSERT-Optimierung

Ich muss eine Menge Zeilen (mehr als 1.000.000.000) in eine SQL Server-Datenbank einfügen. Die Tabelle hat eine AI Id, zwei varchar(80) cols und eine smalldatetime mit GETDATE als Standardwert. Die letzte Spalte ist nur für das Auditorium, aber notwendig.

Ich möchte wissen, wie ich die Zeilen am besten (schnellsten) einfügen kann. Ich habe über BULK INSERT gelesen. Aber wenn es möglich ist, möchte ich es vermeiden, weil die Anwendung nicht auf demselben Server läuft, auf dem die Datenbank gehostet wird, und ich möchte sie so isoliert wie möglich halten.

Danke!

Diego

4voto

AdaTheDev Punkte 135097

Eine andere Möglichkeit wäre bcp .

Wenn Sie .NET verwenden, können Sie alternativ die SqlBulkCopy Klasse, um Daten in großen Mengen einzufügen. Dies ist etwas Ich habe gebloggt über über die Leistung, die Sie vielleicht interessiert, da ich SqlBulkCopy mit einer anderen Methode des Massenladens von Daten in SQL Server aus .NET (mit SqlDataAdapter) verglichen habe. Ein einfaches Beispiel: Das Laden von 100.000 Zeilen dauerte 0,8229 Sekunden mit SqlBulkCopy im Vergleich zu 25,0729 Sekunden mit dem SqlDataAdapter-Ansatz.

1voto

subhash Punkte 276

Erstellen Sie ein SSIS-Paket, das die Datei auf den SQL-Server kopiert, und verwenden Sie dann die Datenflussaufgabe, um Daten aus der Datei in die SQL-Server-Datenbank zu importieren.

0voto

Pavel Urbančík Punkte 1416

Es gibt keinen schnelleren/effizienteren Weg als BULK INSERT, und wenn Sie mit so großen Datenmengen arbeiten, sollten Sie nicht einmal an irgendetwas aus .NET denken, denn dank GC führt die Verwaltung von Millionen von Objekten im Speicher zu massiven Leistungseinbußen.

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