Wie füge ich in kurzer Zeit eine große Anzahl von Datensätzen in die Datenbank ein?


8

Ich muss auf schnellstem Weg eine Reihe von Datensätzen ( 500.000 ) gleichzeitig in die Datenbank einfügen . Ich habe versucht, 1.700 Datensätze gleichzeitig einzufügen, aber es hat zwanzig Minuten gedauert !! Ich benutze SQL-SERVERund C#.

Obwohl die folgende Tabelle nicht zur Technik des schnellen Einfügens beiträgt, entscheide ich mich trotzdem, sie zu verknüpfen, damit Sie besser verstehen, wie viele Felder ich einfügen muss (duplizieren Sie sie um ca. 500 KB ).

Die Felder

Antworten:


12

Es gibt mehrere Möglichkeiten. Hier sind die wichtigsten, die mir in den Sinn kommen.

SSIS - SQL Server Integration Services: Dies ist das SQL Server ETL-Tool, mit dem Sie Daten von nahezu jeder Quelle an nahezu jedes Ziel verschieben können. Dies kann sehr schnell gehen.

BCP - Massenkopierprogramm: Dies ist ein Befehlszeilentool, das mit SQL Server geliefert wird. Es ist sehr gut darin, Textdateien in SQL Server zu verschieben, oder Sie können von einem SQL Server in ein natives Format exportieren und mit demselben Format in einen anderen SQL Server importieren. BCP ist auch sehr schnell, aber etwas eingeschränkter als SSIS.

INSERT INTO Tabellenname SELECT Feldliste FROM othertable : Dies setzt voraus, dass Sie auf demselben Server von einer SQL-Tabelle zu einer anderen wechseln . Dies ist die schnellste, aber bei 500.000 Zeilen sehen Sie eine ziemlich große Transaktion oder müssen sie wie gesagt auflösen.

OPENROWSET : Dies ist eine SQL Server-Funktion, mit der Sie Daten aus verschiedenen Formaten in eine Tabelle ziehen können. Es soll auch ziemlich schnell gehen, aber ich habe nicht viel damit gearbeitet.

Allgemeiner Hinweis: Ihr Primärschlüssel ist mbr_id. Wenn dies in Ihren Quelldaten gespeichert ist (im Gegensatz zu einer Identitätsspalte), erfolgt Ihre Einfügung VIEL schneller, wenn die Quelldaten in der Reihenfolge mbr_id vorliegen.


0

Da benutzt du. NET können Sie die Daten tatsächlich streamen, ohne einen externen Prozess aufzurufen. Sie würden tabellenwertige Parameter verwenden. Siehe meine Antwort auf StackOverflow für Details und einen Link zu einer anderen Variante dieser Methode:

https://stackoverflow.com/a/25815939/577765


0

Um es schneller zu machen (insbesondere wenn es sich um eine anfängliche Grundgesamtheit einer Tabelle handelt), lesen Sie auch das Entfernen von Indizes.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.