Maison > base de données > tutoriel mysql > Pourquoi « explain » signale-t-il un nombre de lignes différent de « count() » ?

Pourquoi « explain » signale-t-il un nombre de lignes différent de « count() » ?

Susan Sarandon
Libérer: 2024-11-06 21:33:02
original
514 Les gens l'ont consulté

Why Does

Différence dans le nombre de lignes renvoyées par "explain" et "count()" : un examen plus approfondi

Une situation déroutante se produit lorsque l'on compare les nombre de lignes renvoyées par "explain" et le nombre réel de lignes obtenu à partir de "count()". Bien qu'il puisse sembler intuitif de supposer que « expliquer » fournit une estimation précise du nombre de lignes récupérées, ce n'est pas toujours le cas.

Comprendre la commande « expliquer »

La commande "explain" n'exécute pas réellement la requête ; au lieu de cela, il analyse le plan de requête et estime le nombre de lignes qui seront traitées. Cette estimation est basée sur divers facteurs, y compris les statistiques maintenues sur les tables impliquées.

Pourquoi les lignes signalées par « expliquer » peuvent différer

L'écart entre les « expliquer » " la sortie et le nombre réel de lignes peuvent être dus aux raisons suivantes :

  • Inexactitudes des estimations : Les estimations utilisées par "explain" ne sont pas toujours précises, en particulier pour les requêtes complexes impliquant plusieurs tables ou jointures.
  • Statistiques obsolètes : Les statistiques sur lesquelles s'appuie "explain" peuvent ne pas être à jour, ce qui conduit à des estimations inexactes.

Un exemple de divergence

Considérons l'exemple suivant :

mysql> select count(*) from table where relation_title='xxxxxxxxx';
+----------+
| count(*) |
+----------+
|  1291958 |
+----------+
mysql> explain select *  from table where relation_title='xxxxxxxxx';
+----+-------------+---------+-
| id | select_type | rows    |
+----+-------------+---------+-
|  1 | SIMPLE      | 1274785 | 
+----+-------------+---------+-
Copier après la connexion

Comme vous pouvez le voir, "expliquer" estime que la requête traitera 1274785 lignes, tandis que "count(*)" renvoie un nombre de 1291958 lignes. Cet écart est dû aux inexactitudes d'estimation et aux statistiques obsolètes expliquées ci-dessus.

Importance d'un nombre de lignes précis

Obtenir un nombre de lignes précis est crucial pour optimiser les requêtes et éviter des frais inutiles. . En comprenant les limites de « expliquer », les développeurs peuvent prendre des décisions éclairées quant à savoir s'ils doivent s'appuyer sur ses estimations ou rechercher des méthodes alternatives pour déterminer le nombre de lignes traitées.

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!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal