Eu quero uma maneira rápida de contar o número de linhas na minha tabela que tem vários milhões de linhas. Encontrei o post " MySQL: Fastest way to count number of rows " no Stack Overflow, que parecia resolver meu problema. Bayuah forneceu esta resposta:
SELECT
table_rows "Rows Count"
FROM
information_schema.tables
WHERE
table_name="Table_Name"
AND
table_schema="Database_Name";
O que eu gostei porque parece uma pesquisa em vez de uma varredura, então deve ser rápido, mas decidi testá-lo contra
SELECT COUNT(*) FROM table
para ver quanta diferença de desempenho havia.
Infelizmente, estou recebendo respostas diferentes, conforme mostrado abaixo:
Pergunta
Por que as respostas são diferentes em aproximadamente 2 milhões de linhas? Estou supondo que a consulta que executa uma verificação completa da tabela é o número mais preciso, mas existe uma maneira de obter o número correto sem ter que executar essa consulta lenta?
Corri ANALYZE TABLE data_302
, que completou em 0,05 segundos. Quando executei a consulta novamente, agora obtive um resultado muito mais próximo de 34384599 linhas, mas ainda não é o mesmo número select count(*)
de 34906061 linhas. A tabela de análise retorna imediatamente e processa em segundo plano? Acho que vale a pena mencionar que este é um banco de dados de teste e não está sendo gravado no momento.
Ninguém vai se importar se é apenas um caso de dizer a alguém o tamanho de uma tabela, mas eu queria passar a contagem de linhas para um pouco de código que usaria essa figura para criar consultas assíncronas de "tamanho igual" para consultar o banco de dados em paralelo, semelhante ao método mostrado em Aumentando o desempenho de consultas lentas com a execução de consultas paralelas por Alexander Rubin. Do jeito que está, vou pegar o id mais alto SELECT id from table_name order by id DESC limit 1
e espero que minhas tabelas não fiquem muito fragmentadas.