Mysql
 sql >> Base de données >  >> RDS >> Mysql

Le moyen le plus rapide d'insérer/mettre à jour un million de lignes dans Laravel 5.7

Désactiver autocommit et valider manuellement à la fin de l'insertion

Selon la documentation MySQL 8.0. (8.5.5 Chargement de données en masse pour les tables InnoDB )

Vous pouvez augmenter la vitesse d'INSERT en désactivant la validation automatique :

Une autre façon de le faire dans Laravel consiste à utiliser Database Transactions :

DB::beginTransaction()

// Your inserts here

DB::commit()

Utilisez INSERT avec plusieurs VALUES

Toujours selon la documentation MySQL 8.0 (8.2.5.1 Optimisation des instructions INSERT ) vous pouvez optimiser la vitesse d'insertion en utilisant plusieurs VALUES sur une seule instruction d'insertion.

Pour le faire avec Laravel, vous pouvez simplement passer un tableau de valeurs au insert() méthode :

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

Selon la documentation, cela peut être plusieurs fois plus rapide.

Lire la documentation

Les deux liens de documentation MySQL que j'ai mis sur ce post contiennent des tonnes de conseils pour augmenter la vitesse d'INSERT.

Évitez d'utiliser Laravel/PHP pour l'insérer

Si votre source de données est (ou peut être) un fichier CSV, vous pouvez l'exécuter beaucoup plus rapidement en utilisant mysqlimport pour importer les données.

L'utilisation de PHP et de Laravel pour importer des données à partir d'un fichier CSV est une surcharge, à moins que vous n'ayez besoin d'effectuer un traitement de données avant l'insertion.