2012-04-19 11 views
34

Ich habe eine SQL-Datei mit zwei Tabellen mit insgesamt rund 600.000 Zeilen. Gestern habe ich versucht, die Datei in Fedora 16 in meine MySQL-Datenbank zu importieren, und es dauerte über 2 Stunden, um die Datei zu importieren. Auf meinem Windows-PC dauerte es 7 Minuten. Meine Linux- und Windows-Rechner haben genau die gleiche Hardware. Ein paar meiner Freunde haben es auch versucht, und sie hatten eine ähnliche Erfahrung.Warum ist der Import von SQL so langsam?

Der Befehl, den wir verwendeten, war: .

Warum gibt es einen solchen Unterschied in der Geschwindigkeit?

+0

Gleiche Tabellentypen (INNODB/MYISAM/...)? –

+0

Ja, die Tabellentypen sind gleich: Innodb –

+0

Haben Sie mysqlimport ausgecheckt? Siehe http://stackoverflow.com/questions/2956407/mysql-console-slow-on-import-of-huge-sql-files – rorycl

Antwort

65

Meine Wette ist, dass Fedora 16 die Transaktion/Sync-Semantik und Windows nicht honoriert. Wenn Sie die Mathematik machen, beträgt 600.000 Updates in zwei Stunden 5.000 pro Minute. Das ist die gleiche Größenordnung wie die Rotationsrate einer Festplatte.

Sie können versuchen, SET autocommit=0; an den Anfang Ihrer Importdatei und COMMIT; zum Ende hinzuzufügen. Weitere Informationen finden Sie unter this page.

+2

Es machte einen großen Unterschied! Habe es einfach nochmal probiert und die Gesamtzeit für den Import war unter 3 Minuten. Tanks viel :) –

+0

Der Unterschied ist astronomisch. Ich habe 20 Minuten auf eine 27MB Dump-Datei gewartet, bevor ich mit Ihrem Vorschlag anfange. Es dauerte weniger als eine Minute danach. Gute Antwort! –

+0

Das hat gut funktioniert. Ansonsten funktioniert auch das Umformen der Eingabedatei mit Masseneinfügungen. Vielen Dank. –

3

Warum Sie nicht exportieren SQL-Datei als BULK INSERT Option und importieren Sie es, diese Optionen versuchen, während ein Backup mysqldump Einnahme

--extended-insert: mehrreihigen Einfügeanweisungen

--quick verwenden: nicht tun Pufferung von Zeilendaten, gut, wenn Tabellen

Hinweis groß sind: Stellen Sie sicher Wert von max_allowed_packet = 32M oder mehr in my.cnf vor der Generierung sQL-Datei erhöhen sollten.

+0

Danke für Ihre Antwort, ich werde es überprüfen. –

+1

@LarsSteen Hat der Tipp von Mahesh Patil einen Unterschied gemacht? – Alex

+0

Nein. Hat keinen großen Unterschied gemacht. –