Optimisation pour une requête lente "SELECT COUNT(*)" dans MySQL
Lors de l'interrogation de tables volumineuses, des performances lentes peuvent survenir malgré la présence de une clause WHERE. Analysons un cas spécifique où une requête "SELECT COUNT(*)" avec un critère de plage prend trop de temps.
L'explication fournie par "EXPLAIN" suggère qu'une analyse de plage est en cours. Cependant, l'écart de performances entre le décompte complet et le décompte filtré reste inexpliqué.
En examinant la définition de la table, nous observons que la colonne "change_event_id" sert de clé primaire, qui est stockée sous forme clusterisée. Cela signifie que les valeurs de clé primaire sont stockées avec les données sur les mêmes pages de disque. Par conséquent, les analyses de plage sur la clé primaire nécessitent la lecture de toutes les pages de données.
Pour améliorer les performances, envisagez les stratégies suivantes :
De plus, il est recommandé de modifier la colonne "change_event_id" pour qu'elle soit "bigint non signée" si elle est incrémentant à partir de zéro. Cela garantira qu'elle pourra stocker des valeurs plus grandes sans déborder.
En mettant en œuvre ces optimisations, les performances de la requête "SELECT COUNT(*)" avec le critère de plage devraient s'améliorer considérablement, la rendant comparable au décompte complet .
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!