Mysql
 sql >> Datenbank >  >> RDS >> Mysql

ein MySQL schnell mit einer großen Reihe von Zeilen füllen

Im Allgemeinen können Sie eine oder mehrere der folgenden verwenden:

  • Starte eine Transaktion, mache Einfügungen, übertrage sie
  • Mehrere Werte in eine einzige Einfügung in die Abfrage packen
  • Lassen Sie alle Beschränkungen fallen, bevor Sie Einfügungen durchführen, und setzen Sie Beschränkungen nach der Masseneinfügung wieder ein (außer möglicherweise Primärschlüssel, da bin ich mir aber nicht sicher)
  • Verwenden Sie insert into ... select falls geeignet

Das erste (mit Transaktionen) hilft höchstwahrscheinlich, aber ich bin mir nicht sicher, ob es auf myisam-Tabellen funktioniert, mit innodb macht es einen sehr guten Job - ich benutze diese nur, wenn ich gezwungen bin, mysql zu verwenden, ich bevorzuge postgresql .

In Ihrem speziellen Fall, dem Einfügen von 100.000 Datenzeilen, könnten Sie Folgendes tun:

INSERT INTO status(id, responseCode, lastUpdate) SELECT @row := @row + 1 as row, 503, NOW() FROM 
(select 0 union all select 1 union all select 2 union all select 3 union all select 4 union all select 5 union all select 6 union all select 7 union all select 8 union all select 9) t,
(select 0 union all select 1 union all select 2 union all select 3 union all select 4 union all select 5 union all select 6 union all select 7 union all select 8 union all select 9) t2, 
(select 0 union all select 1 union all select 2 union all select 3 union all select 4 union all select 5 union all select 6 union all select 7 union all select 8 union all select 9) t3, 
(select 0 union all select 1 union all select 2 union all select 3 union all select 4 union all select 5 union all select 6 union all select 7 union all select 8 union all select 9) t4, 
(select 0 union all select 1 union all select 2 union all select 3 union all select 4 union all select 5 union all select 6 union all select 7 union all select 8 union all select 9) t5, 
(SELECT @row:=0) t6;

Getestet auf meinem Rechner, bekam:

Query OK, 100000 rows affected (0.70 sec)
Records: 100000  Duplicates: 0  Warnings: 0

Ich bin mir ziemlich sicher, dass Sie für 100000 Zeilen nicht viel schneller werden können.