Wie kann mysql insert Millionen Datensätze schneller?
Wollte ich einfügen über Millionen Datensätze in meiner Datenbank, aber es ging sehr langsam, mit einer Geschwindigkeit von rund 40.000 Datensätze/Stunde, denke ich nicht, dass meine hardware zu langsam ist, weil ich sah, wie diskio ist unter 2 MB/s. Ich habe viele Tabellen, die getrennt in verschiedenen .sql-Dateien. Ein einzelner Datensatz ist auch sehr einfach, ein Datensatz ist weniger als 15 Spalten und eine Spalte weniger als 30 Zeichen. Ich habe diesen job unter archlinux mit mysql 5.3. Habt Ihr irgendwelche Ideen? Oder ist diese Geschwindigkeit nicht langsam?
Sie sollten in der Lage sein zu laden 40k Zeilen pro minute. Wie Sie den import der Datensätze?
Was ist der Engpass? Wie sind Sie mit dem einfügen der Datensätze? Können Sie dieses Profil in irgendeiner Weise zu bestimmen, welcher Teil ist für eine lange Zeit?
Sie können auch vorbereitete Anweisungen, wenn Sie das einfügen durch eine Programmiersprache.
Eigentlich ich gedumpten alle Tabellen aus einer sqlite-Datenbank gespeichert .sql-Dateien. Ich wollte, diese Tabellen zu importieren, um mysql-server mit diesem Befehl: mysql -u Benutzer -p Datenbank < table_name.sql. Diese sql-Dateien so Aussehen: CREATE TABLE T ( ... ); INSERT INTO
Was ist der Engpass? Wie sind Sie mit dem einfügen der Datensätze? Können Sie dieses Profil in irgendeiner Weise zu bestimmen, welcher Teil ist für eine lange Zeit?
Sie können auch vorbereitete Anweisungen, wenn Sie das einfügen durch eine Programmiersprache.
Eigentlich ich gedumpten alle Tabellen aus einer sqlite-Datenbank gespeichert .sql-Dateien. Ich wollte, diese Tabellen zu importieren, um mysql-server mit diesem Befehl: mysql -u Benutzer -p Datenbank < table_name.sql. Diese sql-Dateien so Aussehen: CREATE TABLE T ( ... ); INSERT INTO
table1
(field1
, field2
) VALUES ("data1", "data2"); INSERT INTO table1
(field1
, field2
) VALUES ("data1", "data2"); ......(Millionen Zeilen)InformationsquelleAutor Cricket | 2013-10-30
Du musst angemeldet sein, um einen Kommentar abzugeben.
Es ist wahrscheinlich, weil Sie das einfügen von Datensätzen wie diesem:
Senden Sie eine neue Abfrage, jedes mal, wenn Sie brauchen, um
INSERT
etwas schlecht ist. Stattdessen kombinieren Sie einfach alle diese Abfragen in einer einzigen Abfrage, wie dieses.Können Sie auch Lesen Sie mehr über insert-Geschwindigkeit in der Die MySQL-Docs. Es klar describs die folgenden.
Natürlich nicht kombinieren Sie ALLE von Ihnen, wenn der Betrag ist GROß. Angenommen, Sie haben 1000 Zeilen, die Sie einfügen müssen, dann tun Sie es nicht, ein zu einer Zeit. Aber man sollte wohl nicht gleich versuchen, alle 1000 Zeilen in einer einzigen Abfrage. Stattdessen brechen Sie in kleineren Größen.
Wenn es ist immer noch sehr langsam ist, dann könnte es nur werden, weil der server langsam ist.
Beachten Sie, dass Sie natürlich brauchen nicht alle diese Räume in der kombinierten Abfrage, das ist einfach, um sich einen besseren überblick über die Antwort.
dann erstellen Sie eine neue Abfrage, jedes mal, wenn Sie mehr als x Zeilen.
Diese Antwort ist wirklich hilfreich. Die Schritt für Schritt fügt nahm mir fast 6 Stunden komplett einfügen von 1,5 M records, aber mit diesem Ansatz, mit einer Gruppe von 10000 pro Schritt, hat mich nur ~ 90 Sekunden 😀
Wenn Sie sind in der Lage, um den import von Daten aus text-Datei, verwenden Sie LOAD DATA INFILE. MySQL-Handbuch sagt, das ist in der Regel 20-mal schneller als die Verwendung von INSERT-Anweisungen.
InformationsquelleAutor Vallentin