Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

SELECT COUNT(*) é lento, mesmo com cláusula where


O InnoDB usa chaves primárias em cluster, então a chave primária é armazenada junto com a linha nas páginas de dados, não em páginas de índice separadas. Para fazer uma varredura de intervalo, você ainda precisa varrer todas as linhas potencialmente largas nas páginas de dados; observe que esta tabela contém uma coluna TEXT.

Duas coisas que eu tentaria:
  1. execute optimize table . Isso garantirá que as páginas de dados sejam armazenadas fisicamente em ordem ordenada. Isso poderia acelerar uma varredura de intervalo em uma chave primária clusterizada.
  2. crie um índice não primário adicional apenas na coluna change_event_id. Isso armazenará uma cópia dessa coluna em páginas de índice que são muito mais rápidas de digitalizar. Depois de criá-lo, verifique o plano de explicação para ter certeza de que está usando o novo índice.

(você provavelmente também deseja tornar a coluna change_event_id bigint unsigned se estiver incrementando de zero)