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

Il modo più veloce per inserire/aggiornare un milione di righe in Laravel 5.7

Disabilita autocommit e confermare manualmente alla fine dell'inserimento

Secondo i documenti MySQL 8.0. (8.5.5 Caricamento in blocco dei dati per le tabelle InnoDB )

Puoi aumentare la velocità di INSERT disattivando il commit automatico:

Un altro modo per farlo in Laravel è usare Transazioni database :

DB::beginTransaction()

// Your inserts here

DB::commit()

Usa INSERT con più VALUES

Sempre secondo MySQL 8.0 docs (8.2.5.1 Ottimizzazione delle istruzioni INSERT ) puoi ottimizzare la velocità di INSERT utilizzando più VALUES su una singola istruzione di inserimento.

Per farlo con Laravel, puoi semplicemente passare un array di valori a insert() metodo:

DB::table('your_table')->insert([
   [
       'column_a'=>'value',
       'column_b'=>'value',
   ],
   [
       'column_a'=>'value',
       'column_b'=>'value',
   ],
   [
       'column_a'=>'value',
       'column_b'=>'value',
   ],
]);

Secondo i documenti, può essere molte volte più veloce.

Leggi i documenti

Entrambi i link ai documenti MySQL che ho inserito in questo post hanno un sacco di suggerimenti per aumentare la velocità di INSERT.

Evita di usare Laravel/PHP per inserirlo

Se l'origine dati è (o può essere) un file CSV, puoi eseguirlo molto più velocemente utilizzando mysqlimport per importare i dati.

L'utilizzo di PHP e Laravel per importare dati da un file CSV è un sovraccarico, a meno che non sia necessario eseguire un'elaborazione dei dati prima dell'inserimento.