Uitschakelen autocommit
en handmatig vastleggen aan het einde van de invoeging
Volgens MySQL 8.0-documenten. (8.5.5 Bulksgewijs laden van gegevens voor InnoDB-tabellen )
Je kunt de INSERT-snelheid verhogen door automatische vastlegging uit te schakelen:
Een andere manier om dit in Laravel te doen is met behulp van Databasetransacties :
DB::beginTransaction()
// Your inserts here
DB::commit()
Gebruik INSERT
met meerdere VALUES
Ook volgens MySQL 8.0 docs (8.2.5.1 Optimalisatie van INSERT-statements
) u kunt de INSERT-snelheid optimaliseren door meerdere VALUES
te gebruiken op een enkele insert-instructie.
Om het met Laravel te doen, kun je gewoon een reeks waarden doorgeven aan de insert()
methode:
DB::table('your_table')->insert([
[
'column_a'=>'value',
'column_b'=>'value',
],
[
'column_a'=>'value',
'column_b'=>'value',
],
[
'column_a'=>'value',
'column_b'=>'value',
],
]);
Volgens de documenten kan het vele malen sneller.
Lees de documenten
Beide MySQL-documentlinks die ik in dit bericht heb geplaatst, bevatten talloze tips voor het verhogen van de INSERT-snelheid.
Vermijd het gebruik van Laravel/PHP om het in te voegen
Als uw gegevensbron een CSV-bestand is (of kan zijn), kunt u het een stuk sneller uitvoeren met mysqlimport
om de gegevens te importeren.
Het gebruik van PHP en Laravel om gegevens uit een CSV-bestand te importeren is een overhead, tenzij u enige gegevensverwerking moet doen voordat u deze invoegt.