Maison  >  Article  >  base de données  >  Pourquoi ma requête \"SELECT COUNT(*) FROM change_event\" est-elle si lente malgré l'utilisation d'un index principal ?

Pourquoi ma requête \"SELECT COUNT(*) FROM change_event\" est-elle si lente malgré l'utilisation d'un index principal ?

Susan Sarandon
Susan Sarandonoriginal
2024-10-30 22:43:291000parcourir

Why is my

Performances lentes avec la requête « SELECT COUNT(*) » malgré l'utilisation de l'index

Contexte :

La requête "SELECT COUNT(*) FROM change_event me WHERE change_event_id > '1212281603783391';" s'exécute exceptionnellement lentement dans MySQL, prenant plus d'une minute à s'exécuter. Ceci malgré la présence d'un index PRIMARY sur la colonne "change_event_id".

Clés primaires clusterisées InnoDB :

Dans InnoDB, les clés primaires sont regroupées, ce qui signifie qu'elles sont stockés à côté des lignes de données dans les pages de données. Cela nécessite d'analyser les données de lignes potentiellement volumineuses lors des analyses de plage, ce qui peut réduire les performances. La table "change_event" contient une colonne TEXT, augmentant encore la largeur des lignes.

Techniques d'optimisation :

  • Optimiser la table : L'exécution de "OPTIMIZE TABLE" peut réorganiser les pages de données à trier par clé primaire. Cela peut potentiellement améliorer les performances des analyses de plage sur les clés primaires clusterisées.
  • Créer un index non primaire supplémentaire : La création d'un index non primaire uniquement sur la colonne "change_event_id" peut fournir un moyen plus rapide de rechercher une plage de valeurs. Le plan d'explication doit être vérifié après la création de l'index pour garantir son utilisation.

Recommandation supplémentaire :

  • Ajustez le type de données : Si la colonne "change_event_id" incrémente à partir de zéro, pensez à changer son type de données en "bigint unsigned" pour éviter les valeurs négatives.

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