Maison  >  Article  >  base de données  >  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 ?

DDD
DDDoriginal
2024-10-31 02:10:02363parcourir

How Can I Speed Up a Slow

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

Le problème en question concerne un "SELECT" considérablement lent Requête COUNT(*)" 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.

Clustered Primary Keys

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 : Pensez à 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". être "BIGINT UNSIGNED" s'il incrémente à partir de zéro. Ce changement peut entraîner une réduction des besoins de stockage et une amélioration des performances.

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