sql >> Base de Datos >  >> RDS >> Mysql

La forma más rápida de insertar/actualizar un millón de filas en Laravel 5.7

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.