Maison > Article > base de données > Pourquoi ma requête COUNT(*) avec une clause WHERE est-elle lente dans MySQL ?
Requête COUNT(*) lente dans MySQL avec la clause Where
Lorsque vous traitez des requêtes MySQL lentes impliquant COUNT(*), comprendre le sous-jacent facteurs sont primordiaux. Dans ce cas particulier, le long temps d'exécution n'est pas immédiatement apparent à partir de la requête elle-même ou de l'instruction EXPLAIN.
Comprendre le problème
La table en question, change_event, a une clé primaire clusterisée sur la colonne change_event_id. Dans InnoDB, les clés primaires clusterisées sont stockées à côté des données dans les pages de données, contrairement aux index non clusterisés qui résident dans des pages d'index distinctes.
Le problème des analyses de plage sur les clés primaires clusterisées
La requête présentée effectue une analyse de plage sur la clé primaire clusterisée, où elle doit analyser une partie importante de la table. Cela peut prendre du temps, car les pages de données peuvent ne pas être physiquement stockées dans un ordre trié, ce qui entraîne des opérations d'E/S supplémentaires.
Solutions potentielles
Pour optimiser cela requête, envisagez de mettre en œuvre l'une ou les deux stratégies suivantes :
Remarque supplémentaire :
Envisagez de modifier la colonne change_event_id pour qu'elle soit BIGINT UNSIGNED s'il s'agit effectivement d'une colonne à incrémentation automatique. en partant de zéro. Cela éviterait des problèmes potentiels de débordement d'entier signé.
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!