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.