Problème de performances avec les opérations d'insertion MySQL InnoDB
Introduction
Insertion de données dans des tables MySQL à l'aide le moteur InnoDB peut, dans certains scénarios, prendre beaucoup plus de temps que prévu. Cet article répond à ce problème de performances et propose une solution.
Question clé
Pourquoi l'insertion de données dans les tables MySQL InnoDB est-elle excessivement lente ?
Analyse
Le script de test fourni illustre une forte disparité dans les performances d'insertion entre MyISAM et Moteurs de stockage InnoDB. MyISAM réalise l'insertion d'un million de lignes en 6 secondes environ, tandis qu'InnoDB nécessite plus de 3 400 secondes pour la même tâche.
Explication
La principale raison de cet écart de performances réside dans les différences fondamentales de conception entre MyISAM et InnoDB. MyISAM ne prend pas en charge les transactions, ce qui lui permet d'insérer des données plus efficacement. En revanche, InnoDB applique l'intégrité des transactions, nécessitant une opération de validation après chaque instruction. Par défaut, InnoDB effectue un vidage du journal sur le disque après chaque insertion, ce qui entraîne une surcharge de performances importante.
Solution
Pour atténuer ce problème de performances, il est crucial d'exploiter Capacités de gestion des transactions d'InnoDB efficaces. En enfermant les instructions d'insertion dans une transaction explicite, nous pouvons réduire la fréquence des écritures sur disque et améliorer considérablement la vitesse d'insertion.
Pour y parvenir, exécutez l'instruction suivante avant de lancer la boucle d'insertion :
START TRANSACTION
Après avoir terminé les opérations d'insertion, validez la transaction en utilisant l'instruction suivante :
COMMIT
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!