sql >> Databasteknik >  >> RDS >> Mysql

Snabbaste sättet att infoga/uppdatera en miljon rader i Laravel 5.7

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.



  1. Hur ansluter jag till MySQL på Amazon EC2 från Linux / Mac?

  2. Hur man omdirigerar stdout från docker-container till värd

  3. MySQL-gruppera efter datum och antal inklusive saknade datum

  4. Bevara ORDER BY i SELECT INTO