Deaktiver autocommit
og commit manuelt ved slutningen af indsættelsen
Ifølge MySQL 8.0-dokumenter. (8.5.5 Bulk dataindlæsning til InnoDB-tabeller )
Du kan øge INSERT-hastigheden ved at slå automatisk commit fra:
En anden måde at gøre det på i Laravel er at bruge databasetransaktioner :
DB::beginTransaction()
// Your inserts here
DB::commit()
Brug INSERT
med flere VALUES
Også ifølge MySQL 8.0-dokumenter (8.2.5.1 Optimering af INSERT-sætninger
) kan du optimere INSERT-hastigheden ved at bruge flere VALUES
på en enkelt indsætningserklæring.
For at gøre det med Laravel kan du bare sende en række værdier til insert()
metode:
DB::table('your_table')->insert([
[
'column_a'=>'value',
'column_b'=>'value',
],
[
'column_a'=>'value',
'column_b'=>'value',
],
[
'column_a'=>'value',
'column_b'=>'value',
],
]);
Ifølge lægerne kan det være mange gange hurtigere.
Læs dokumenterne
Begge MySQL docs-links, som jeg sætter i dette indlæg, har tonsvis af tips til at øge INSERT-hastigheden.
Undgå at bruge Laravel/PHP til at indsætte det
Hvis din datakilde er (eller kan være) en CSV-fil, kan du køre den meget hurtigere ved at bruge mysqlimport
for at importere dataene.
Det er en overhead at bruge PHP og Laravel til at importere data fra en CSV-fil, medmindre du skal udføre noget databehandling før indsættelse.