Paramètres MySQL optimaux pour les requêtes fournissant de grandes quantités de données
Introduction
MySQL est largement utilisé comme stockage pour de grandes quantités de données. Cependant, lors de l'exécution de requêtes qui récupèrent un excès de données, les performances peuvent se dégrader considérablement. Pour optimiser ces requêtes, divers paramètres et ajustements peuvent être mis en œuvre.
Description du problème
Un scientifique a rencontré des performances de requête lentes lors de la récupération des données d'une table contenant environ 100 millions d'enregistrements. La tâche impliquait l’exécution de requêtes qui renvoyaient chacune environ 50 millions d’enregistrements et prenait plusieurs heures. Le tableau avait un index multi-colonnes défini sur deux colonnes.
Analyse des problèmes et recommandations
1. Optimisation de la configuration du serveur
- Consultez les ressources spécialisées dans l'optimisation des performances MySQL pour obtenir des recommandations sur l'optimisation des variables du serveur.
- Envisagez d'utiliser une procédure stockée pour traiter les données côté serveur, en éliminant la nécessité de transmettre de grands ensembles de résultats à la couche d'application.
2. Tirer parti des index clusterisés (à l'aide du moteur Innodb)
- Contrairement à MyISAM, Innodb utilise des index clusterisés. Pour les tables contenant de gros volumes de données, les index clusterisés offrent des avantages significatifs en termes de performances en stockant les lignes de données sur la même page que les pistes de recherche d'index.
- Convertissez la table vers le moteur Innodb et créez un index clusterisé sur la clé primaire.
3. Récupération de données par lots
- Décomposez la requête en lots plus petits en sélectionnant des plages de données plus petites.
- Implémentez une application multithread pour récupérer et traiter ces lots simultanément. Cette approche peut réduire la surcharge du réseau et améliorer les performances.
4. Approches alternatives
- Envisagez de diviser la table en deux tables en fonction du champ de l'indicateur pour éliminer le besoin de filtrage.
- Si des contraintes administratives interdisent la division des tables, étudiez la possibilité d'utiliser une implémentation d'index personnalisée.
- Explorer l'utilisation de sources de données externes ou de solutions d'entreposage de données pour gérer de gros volumes de données.
Mise en œuvre des recommandations
-
Procédure stockée : Créez une procédure stockée qui traite les données côté serveur à l'aide d'un curseur. Cette approche est recommandée pour les cas où un traitement post-requête est nécessaire.
-
Innodb et index clusterisé : Créez un index clusterisé sur la clé primaire dans la table Innodb et convertissez-le vers le moteur Innodb . Cette optimisation accélère considérablement la récupération des données.
-
Batching : Développez une application multithread qui récupère les données par lots. Optimisez la taille du lot pour des performances optimales.
-
Approches alternatives : Évaluez la faisabilité d'approches alternatives telles que le fractionnement de tables ou des sources de données externes en fonction d'exigences spécifiques.
Avantages et résultats
La mise en œuvre de ces recommandations peut améliorer considérablement les performances des requêtes qui fournissent de grandes quantités de données, ce qui entraîne une réduction des temps d'exécution des requêtes et une amélioration de l'efficacité des tâches.
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!