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

Der schnellste Weg, eine Million Zeilen in Laravel 5.7 einzufügen/aktualisieren

autocommit deaktivieren und am Ende des Einfügens manuell übergeben

Laut MySQL 8.0-Dokumentation. (8.5.5 Laden von Massendaten für InnoDB-Tabellen )

Sie können die INSERT-Geschwindigkeit erhöhen, indem Sie Auto-Commit deaktivieren:

Eine andere Möglichkeit, dies in Laravel zu tun, ist die Verwendung von Datenbanktransaktionen :

DB::beginTransaction()

// Your inserts here

DB::commit()

Verwenden Sie INSERT mit mehreren VALUES

Auch gemäß MySQL 8.0-Dokumentation (8.2.5.1 Optimizing INSERT Statements ) können Sie die INSERT-Geschwindigkeit optimieren, indem Sie mehrere VALUES verwenden in einer einzigen Einfügeanweisung.

Um dies mit Laravel zu tun, können Sie einfach ein Array von Werten an insert() übergeben Methode:

DB::table('your_table')->insert([
   [
       'column_a'=>'value',
       'column_b'=>'value',
   ],
   [
       'column_a'=>'value',
       'column_b'=>'value',
   ],
   [
       'column_a'=>'value',
       'column_b'=>'value',
   ],
]);

Laut der Dokumentation kann es um ein Vielfaches schneller sein.

Dokumentation lesen

Beide Links zu MySQL-Dokumenten, die ich in diesen Beitrag gestellt habe, enthalten unzählige Tipps zur Erhöhung der INSERT-Geschwindigkeit.

Vermeiden Sie die Verwendung von Laravel/PHP zum Einfügen

Wenn Ihre Datenquelle eine CSV-Datei ist (oder sein kann), können Sie sie mit mysqlimport um die Daten zu importieren.

Die Verwendung von PHP und Laravel zum Importieren von Daten aus einer CSV-Datei ist ein Overhead, es sei denn, Sie müssen vor dem Einfügen Daten verarbeiten.