sql >> Base de Datos >  >> RDS >> Mysql

SELECT COUNT (*) es lento, incluso con la cláusula where

InnoDB usa claves primarias agrupadas, por lo que la clave principal se almacena junto con la fila en las páginas de datos, no en páginas de índice separadas. Para hacer un escaneo de rango, aún tiene que escanear todas las filas potencialmente anchas en las páginas de datos; tenga en cuenta que esta tabla contiene una columna de TEXTO.

Dos cosas que intentaría:

  1. ejecutar optimize table . Esto asegurará que las páginas de datos se almacenen físicamente en orden. Posiblemente, esto podría acelerar un escaneo de rango en una clave principal agrupada.
  2. cree un índice no principal adicional solo en la columna change_event_id. Esto almacenará una copia de esa columna en las páginas de índice que serán mucho más rápidas de escanear. Después de crearlo, verifique el plan de explicación para asegurarse de que esté usando el nuevo índice.

(probablemente también desee hacer que la columna change_event_id sea bigint sin firmar si se incrementa desde cero)