Maison > Article > base de données > Pourquoi « explain » signale-t-il un nombre de lignes différent de « count() » ?
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 :
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!