Deshabilitar autocommit
y confirmar manualmente al final de la inserción
De acuerdo con los documentos de MySQL 8.0. (8.5.5 Carga masiva de datos para tablas InnoDB )
Puede aumentar la velocidad de INSERCIÓN desactivando la confirmación automática:
Otra forma de hacerlo en Laravel es usando Transacciones de base de datos :
DB::beginTransaction()
// Your inserts here
DB::commit()
Usar INSERT
con múltiples VALUES
También de acuerdo con los documentos de MySQL 8.0 (8.2.5.1 Optimización de declaraciones INSERT
) puedes optimizar la velocidad de INSERCIÓN usando múltiples VALUES
en una sola declaración de inserción.
Para hacerlo con Laravel, simplemente puede pasar una matriz de valores a insert()
método:
DB::table('your_table')->insert([
[
'column_a'=>'value',
'column_b'=>'value',
],
[
'column_a'=>'value',
'column_b'=>'value',
],
[
'column_a'=>'value',
'column_b'=>'value',
],
]);
Según los documentos, puede ser muchas veces más rápido.
Leer los documentos
Ambos enlaces de documentos de MySQL que puse en esta publicación tienen muchos consejos para aumentar la velocidad de INSERCIÓN.
Evite usar Laravel/PHP para insertarlo
Si su fuente de datos es (o puede ser) un archivo CSV, puede ejecutarlo mucho más rápido usando mysqlimport
para importar los datos.
El uso de PHP y Laravel para importar datos de un archivo CSV es una sobrecarga, a menos que necesite procesar algunos datos antes de insertarlos.