sql >> Database teknologi >  >> RDS >> Mysql

Hurtigste måde at indsætte/opdatere en million rækker i Laravel 5.7

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.



  1. MySQL-serverstartproblemer på Mavericks

  2. Dataændringer under Read Committed Snapshot Isolation

  3. Hvordan sender man HTML-elementer gennem JSON ved hjælp af PHP?

  4. UDF resultat fejl