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.