Mysql
 sql >> Base de données >  >> RDS >> Mysql

SELECT COUNT(*) est lent, même avec la clause where

InnoDB utilise des clés primaires en cluster, de sorte que la clé primaire est stockée avec la ligne dans les pages de données, et non dans des pages d'index séparées. Pour effectuer une analyse de plage, vous devez toujours parcourir toutes les lignes potentiellement larges des pages de données ; notez que ce tableau contient une colonne TEXT.

Deux choses que j'essaierais :

  1. exécuter optimize table . Cela garantira que les pages de données sont physiquement stockées dans un ordre trié. Cela pourrait éventuellement accélérer une analyse de plage sur une clé primaire en cluster.
  2. créer un index non primaire supplémentaire uniquement sur la colonne change_event_id. Cela stockera une copie de cette colonne dans les pages d'index qui seront beaucoup plus rapides à numériser. Après l'avoir créé, vérifiez le plan d'exécution pour vous assurer qu'il utilise le nouvel index.

(vous voudrez probablement aussi rendre la colonne change_event_id bigint unsigned s'il s'incrémente à partir de zéro)