sql >> Database >  >> RDS >> Mysql

Snelste manier om een ​​miljoen rijen in Laravel 5.7 in te voegen/bij te werken

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.



  1. SQL - subquery's voor topresultaat zonder volgorde door

  2. MySQL-vlaggen in stortplaatsen

  3. Dubbele aanhalingstekens vervangen door dubbele aanhalingstekens in R

  4. Een array doorgeven aan mysql