Optimiser l'importation de données MySQL à l'aide de Load Data Infile
L'importation de grands ensembles de données dans des tables MySQL peut être une tâche fastidieuse. Lorsque vous utilisez la commande « Charger les données dans le fichier… », il peut s’avérer difficile d’équilibrer la vitesse et l’intégrité des données. Cette question explore les moyens d'améliorer les performances de ces importations, en particulier pour les tables avec des clés.
Augmentation de la vitesse d'importation
La principale préoccupation mentionnée dans la question est la clé lente création après importation de données sans clés. Pour résoudre ce problème :
-
Trier le fichier CSV : Organisez les données dans le fichier CSV dans l'ordre de la clé primaire de la table. Cela aide Innodb à utiliser sa structure de clé primaire en cluster pour un chargement plus rapide.
-
Désactiver les contraintes : Désactivez temporairement les vérifications de clés uniques et étrangères pour réduire les frais généraux pendant le chargement. Utilisez les commandes set unique_checks = 0; et définissez Foreign_key_checks = 0;.
-
Désactivez la journalisation binaire : Désactivez la journalisation binaire (définissez sql_log_bin=0;) pour contourner la journalisation et améliorer les performances.
-
Split Fichiers volumineux : Divisez les gros fichiers CSV en morceaux plus petits et chargez-les individuellement. Cela peut réduire la consommation de mémoire et accélérer le processus.
Accélération de la création de clés
Après le chargement des données, la reconstruction des clés peut être une opération longue. Voici quelques suggestions :
-
Insertion en bloc : Utilisez la clause BULK INSERT dans l'instruction LOAD DATA INFILE pour importer des données avec des clés en une seule fois.
-
Index de hachage adaptatif : Activez l'index de hachage adaptatif (innodb_adaptive_hash_index=ON) pour accélérer la création d'index pour les requêtes fréquemment utilisées.
-
Indexation parallèle : Si possible, utilisez l'indexation parallèle (innodb_parallel_alter=ON) pour créer plusieurs threads pour la création d'index, réduisant ainsi potentiellement le temps nécessaire.
Terminer les requêtes lentes
Pour mettre fin aux requêtes lentes qui continuent de s'exécuter après avoir été résilié, pensez à :
-
Réessayez de vous connecter : Déconnectez-vous et reconnectez-vous au serveur MySQL pour terminer la requête en douceur.
-
Utilisez l'ID de requête : Identifiez l'ID de la requête à l'aide de SHOW PROCESSLIST et supprimez-la à l'aide de KILL [QUERY_ID].
-
Redémarrez MySQL : En dernier recours, le redémarrage de MySQL mettra fin à toutes les requêtes en cours. Cependant, cela peut entraîner une interruption du service.
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!