Ao contrário das tabelas MyISAM, as tabelas InnoDB não registram quantas linhas a tabela contém.
Por causa disso, a única maneira de saber o número exato de linhas em uma tabela InnoDB é inspecionar cada linha na tabela e acumular uma contagem. Portanto, em grandes tabelas InnoDB, executando um
SELECT COUNT(*) FROM innodb_table
A consulta pode ser muito lenta porque faz uma varredura completa da tabela para obter o número de linhas. phpMyAdmin usa uma consulta como
SHOW TABLE STATUS
para obter uma contagem estimada do número de linhas na tabela do mecanismo (InnoDB). Como é apenas uma estimativa, varia cada vez que você a chama, às vezes as variações podem ser bastante grandes e às vezes são próximas. Aqui está uma postagem de blog informativa sobre COUNT(*) for Tabelas InnoDB por Percona.
A página de manual do MySQL para SHOW TABLE STATUS afirma:
O número de linhas. Alguns mecanismos de armazenamento, como MyISAM, armazenam a contagem exata. Para outros mecanismos de armazenamento, como o InnoDB, esse valor é uma aproximação e pode variar do valor real em até 40 a 50%. Nesses casos, use SELECT COUNT(*) para obter uma contagem precisa.
A página sobre restrições do InnoDB entra em mais detalhes:
SHOW TABLE STATUS não fornece estatísticas precisas sobre tabelas InnoDB, exceto para o tamanho físico reservado pela tabela. A contagem de linhas é apenas uma estimativa aproximada usada na otimização SQL.
O InnoDB não mantém uma contagem interna de linhas em uma tabela porque transações simultâneas podem “ver” diferentes números de linhas ao mesmo tempo. Para processar umSELECT COUNT(*) FROM t
instrução, InnoDB scansan índice da tabela, que leva algum tempo se o índice não estiver totalmente no buffer pool. Se sua tabela não muda com frequência, usar o cache de consulta do MySQL é uma boa solução. Para obter uma contagem rápida, você deve usar uma tabela de contagem que você mesmo criou e deixar seu aplicativo atualizá-la de acordo com as inserções e exclusões que faz. Se uma contagem aproximada de linhas for suficiente,SHOW TABLE STATUS
pode ser usado.Consulte a Seção 14.3.14.1, “Desempenho do InnoDB Dicas de ajuste” .