Inaktivera autocommit
och commit manuellt vid slutet av infogningen
Enligt MySQL 8.0-dokument. (8.5.5 Massdataladdning för InnoDB-tabeller )
Du kan öka INSERT-hastigheten genom att stänga av auto commit:
Ett annat sätt att göra det i Laravel är att använda Databastransaktioner :
DB::beginTransaction()
// Your inserts here
DB::commit()
Använd INSERT
med flera VALUES
Även enligt MySQL 8.0-dokument (8.2.5.1 Optimera INSERT-utlåtanden
) kan du optimera INSERT-hastigheten genom att använda flera VALUES
på en enkel infogningssats.
För att göra det med Laravel kan du bara skicka en uppsättning värden till insert()
metod:
DB::table('your_table')->insert([
[
'column_a'=>'value',
'column_b'=>'value',
],
[
'column_a'=>'value',
'column_b'=>'value',
],
[
'column_a'=>'value',
'column_b'=>'value',
],
]);
Enligt dokumenten kan det gå många gånger snabbare.
Läs dokumenten
Båda MySQL-dokumentlänkarna som jag lägger i det här inlägget har massor av tips om hur du ökar INSERT-hastigheten.
Undvik att använda Laravel/PHP för att infoga den
Om din datakälla är (eller kan vara) en CSV-fil kan du köra den mycket snabbare med mysqlimport
för att importera data.
Att använda PHP och Laravel för att importera data från en CSV-fil är en overhead, såvida du inte behöver göra lite databearbetning innan du infogar.