/ / MySQL Fügt 20K-Zeilen in Einzeleinfügung ein - mysql, bulkinsert

MySQL Einfügen von 20K Zeilen in einzelne Einfügeoperationen - mysql, bulkinsert

In meine Tabelle füge ich bei jeder Ladung etwa 20.000 Zeilen ein. Im Moment mache ich das Stück für Stück. Von der mysql-Website habe ich erfahren, dass das Einfügen mehrerer Zeilen mit einer einzelnen Einfügeabfrage schneller ist.

Kann ich alle 20000 in einer einzigen Abfrage einfügen?

Was passiert, wenn in diesen 20000 Zeilen Fehler auftreten? wie wird mysql damit umgehen?

Antworten:

7 für die Antwort № 1

Wenn Sie die Zeilen aus einer anderen Tabelle einfügen, können Sie das verwenden INSERT ... SELECT Muster zum Einfügen der Zeilen.

Wenn Sie jedoch die Werte mit einfügen INSERT ... VALUES Muster dann haben Sie das Limit von max_allowed_packet.

Auch aus den Dokumenten: -

Kombinieren Sie viele kleine, um die Einschubgeschwindigkeit zu optimierenOperationen in einem einzigen große Operation. Idealerweise stellen Sie eine einzelne Verbindung her und senden die Daten für viele neue Zeilen gleichzeitig und verzögern alle Indexaktualisierungen und Konsistenz Überprüfung bis zum Ende.

Beispiel:-

INSERT INTO `table1` (`column1`, `column2`) VALUES ("d1", "d2"),
("d1", "d2"),
("d1", "d2"),
("d1", "d2"),
("d1", "d2");

Was passiert, wenn in diesen 20000 Zeilen Fehler auftreten?

Wenn beim Einfügen der Datensätze Fehler auftreten, wird der Vorgang abgebrochen.


3 für die Antwort № 2

http://dev.mysql.com/doc/refman/5.5/en/insert.html

INSERT-Anweisungen, die die VALUES-Syntax verwenden, können mehrere Zeilen einfügen. Zu Fügen Sie dazu mehrere Listen mit Spaltenwerten hinzu, die jeweils eingeschlossen sind Klammern und durch Kommas getrennt.

Beispiel:

INSERT INTO tbl_name (a,b,c) VALUES(1,2,3),(4,5,6),(7,8,9);

Sie können Code zum Generieren der Einfügung verwenden VALUES Abschnitt basierend auf Ihrer Datenquelle.

Fehler: wenn es fehler in der INSERT Anweisung (einschließlich in einer der Zeilen) wird der Vorgang abgebrochen.

Abfrage generieren - dies hängt von Ihrer Datenquelle ab. Wenn Sie beispielsweise Daten aus einem assoziativen Array in PHP erhalten, gehen Sie folgendermaßen vor:

$sql = "INSERT INTO tbl_name (a, b, c) VALUES ";
foreach($dataset as $row)
{
$sql .= "(" + $row["a"] + ", "  + $row["a"] + ", "  + $row["a"] + ")";
// OR
$sql .= "($row[a], $row[b], $row[c])";
}

Einige weitere Ressourcen:

Optimieren Sie MySQL-Abfragen - Schnelle Einfügungen mit mehreren Zeilen

Der schnellste Weg zum Einfügen von 100K-Datensätzen


1 für die Antwort № 3

Batch-Insert mit SQL: Einfügen in ...coln) values ​​(col ... coln), (col ... coln) ... aber die SQL-Länge ist standardmäßig auf 1M beschränkt. Sie können den Parameter max_allowed_packet so ändern, dass größere Einzeleinfügungen unterstützt werden