Maison > Article > base de données > La requête lente de MySQL a-t-elle un impact ?
La lenteur des requêtes MySQL a un impact, les raisons sont : 1. Il n'y a pas d'index ou l'index n'est pas utilisé ; 2. Le faible débit d'E/S forme un goulot d'étranglement 3. Mémoire insuffisante ; est lent ; 5. Une requête. La quantité de données est trop importante. 6. Un blocage se produit.
L'environnement d'exploitation de ce tutoriel : système Windows 7, mysql version 8.0.22, ordinateur DELL G3. Cette méthode convient à toutes les marques d'ordinateurs.
Recommandations d'apprentissage gratuites associées : Tutoriel vidéo MySQL
La requête lente MySQL est influente.
Les raisons courantes de la lenteur des requêtes sont les suivantes :
1. Il n'y a pas d'index ou aucun index n'est utilisé.
PS : Les index sont utilisés pour trouver rapidement des enregistrements avec des valeurs spécifiques. Tous les index MySQL sont enregistrés sous forme d'arbres B. S'il n'y a pas d'index, lors de l'exécution d'une requête, MySQL doit analyser tous les enregistrements de la table entière en commençant par le premier enregistrement jusqu'à ce qu'il trouve un enregistrement répondant aux exigences. Plus le nombre d'enregistrements dans la table est élevé, plus le coût de cette opération est élevé. Si un index a été créé sur la colonne utilisée comme condition de recherche, MySQL peut rapidement obtenir l'emplacement de l'enregistrement cible sans analyser aucun enregistrement. Si la table contient 1 000 enregistrements, la recherche d’enregistrements via l’index est au moins 100 fois plus rapide que l’analyse séquentielle des enregistrements.
Type d'index :
Index ordinaire : Il s'agit du type d'index le plus basique, sans restrictions telles que l'unicité.
Index unique : fondamentalement identique à un index normal, mais toutes les colonnes d'index ne peuvent apparaître qu'une seule fois pour conserver leur unicité.
Clé primaire : La clé primaire est un index unique, mais doit être spécifiée comme "PRIMARY KEY".
Index en texte intégral : MYSQL prend en charge l'index en texte intégral et la recherche en texte intégral à partir de la version 3.23.23. Dans MYSQL, le type d'index de texte intégral est FULLTEXT. Des index de texte intégral peuvent être créés sur des colonnes de type VARCHAR ou TEXT.
2. Un faible débit d'E/S forme un goulot d'étranglement.
PS : Il s'agit d'une analyse de la couche système selon laquelle MYSQL consomme plus d'E/S. La surveillance générale des bases de données accorde également plus d’attention aux IO.
Commande de surveillance : $iostat -d -k 1 10
Le paramètre -d indique que l'état d'utilisation du périphérique (disque) est affiché -k certaines colonnes utilisant des unités de bloc forcent les kilo-octets à être ; utilisé ; 1 10 signifie que l’affichage des données est actualisé toutes les secondes et est affiché 10 fois au total.
3. Mémoire insuffisante
Surveiller l'utilisation de la mémoire : vmstat [-n] [délai [nombre de fois]]
Mémoire
swpd : Basculez vers la mémoire sur la mémoire d'échange (par défaut en Ko)
• Si la valeur de swpd n'est pas 0, ou est relativement grande, comme plus de 100 M, mais les valeurs à long terme de si et donc valent 0, nous n'avons pas à nous inquiéter de cette situation, cela n'affectera pas les performances du système.
gratuit : mémoire physique libre
buff : mémoire utilisée comme cache tampon, tamponnant la lecture et l'écriture des périphériques de bloc
cache : mémoire utilisée comme cache de pages, cache du système de fichiers • Si la valeur du cache est grande, cela signifie qu'il y a de nombreux fichiers dans le cache. Si les fichiers fréquemment consultés peuvent être mis en cache, le bi IO lu du disque sera très petit.
4. La vitesse du réseau est lente
pingez IP -t pour vérifier s'il y a une perte de paquets.
5. La quantité de données dans une requête est trop importante.
Par exemple, s'il n'y a pas de requête de pagination, des dizaines de milliers d'enregistrements peuvent être extraits en même temps. La base de données est peut-être bloquée.
6. Une impasse se produit
Ce qu'on appelle l'impasse : fait référence à une situation causée par deux ou plusieurs processus en compétition pour les ressources lors de l'exécution. Le phénomène d'attente de chacun. d'autres, sans force extérieure, ils ne pourront pas avancer
Afficher l'état innodb pour vérifier l'état du moteur, vous pouvez voir quelles instructions provoquent une impasse.
Exécutez show processlist pour trouver le numéro de thread de blocage. Ensuite, Kill processNo
7 Les lignes ou colonnes inutiles sont renvoyées
Requête générale Instructions SQL Be. assurez-vous de spécifier les champs explicitement. N'utilisez pas * pour interroger
8. Faites attention à la différence entre UNion et UNion all. UNION, tout va bien
UNION filtrera les enregistrements en double après la liaison des tables, donc après la liaison des tables, il triera l'ensemble de résultats généré, supprimera les enregistrements en double et renverra les résultats. Par conséquent, l’efficacité de l’union doit être élevée !
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!