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.