"Si un ouvrier veut bien faire son travail, il doit d'abord affûter ses outils." - Confucius, "Les Entretiens de Confucius. Lu Linggong"
Page de garde > La programmation > Comment puis-je accélérer une requête lente \"SELECT COUNT(*)...\" avec une clause WHERE dans MySQL ?

Comment puis-je accélérer une requête lente \"SELECT COUNT(*)...\" avec une clause WHERE dans MySQL ?

Publié le 2024-11-12
Parcourir:902

How Can I Speed Up a Slow \

Optimisation de "SELECT COUNT(*)..." avec la clause Where

Le problème en question concerne un "SELECT COUNT" considérablement lent (*)" requête dans MySQL, même lorsqu'une clause "WHERE" est appliquée. Pour relever ce défi, il est crucial de comprendre le mécanisme de stockage de MySQL.

Clés primaires en cluster

InnoDB, le moteur de stockage utilisé dans cette instance, utilise des clés primaires en cluster. Cela signifie que la clé primaire est stockée à côté de la ligne de données dans les mêmes pages de données, plutôt que dans des pages d'index distinctes. Par conséquent, effectuer une analyse de plage sur une clé primaire en cluster nécessite d’analyser toutes les lignes, y compris leurs valeurs de colonnes potentiellement larges. La table en question contient une colonne TEXT, ce qui aggrave encore le problème de performances.

Stratégies d'optimisation

Pour optimiser cette requête, envisagez les stratégies suivantes :

  1. Optimiser la table : L'exécution de "OPTIMIZE TABLE" garantit que les pages de données sont physiquement triées dans l'ordre. Cette optimisation peut potentiellement améliorer les performances des analyses de plage sur les clés primaires clusterisées.
  2. Créer un index supplémentaire : Envisagez de créer un index non primaire uniquement sur la colonne "change_event_id". Cela créera une copie de cette colonne dans les pages d'index, ce qui est beaucoup plus rapide à analyser par rapport à la clé primaire clusterisée. Vérifiez le plan d'explication après avoir créé l'index pour confirmer son utilisation.

Suggestion supplémentaire

Pour améliorer davantage les performances, envisagez de modifier la colonne "change_event_id" en être "BIGINT UNSIGNED" s'il incrémente à partir de zéro. Ce changement peut entraîner une réduction des besoins en stockage et une amélioration des performances.

Dernier tutoriel Plus>

Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.

Copyright© 2022 湘ICP备2022001581号-3