Maison  >  Article  >  base de données  >  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
Susan Sarandonoriginal
2024-11-06 21:33:02440parcourir

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 | 
+----+-------------+---------+-

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!

Déclaration:
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