Quero uma maneira rápida de contar o número de linhas na minha tabela que possui vários milhões de linhas. Encontrei o post " MySQL: A maneira mais rápida de contar o número de linhas " no Stack Overflow, que parecia resolver o 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 se parece com uma pesquisa em vez de uma verificação, por isso deve ser rápido, mas decidi testá-lo
SELECT COUNT(*) FROM table
para ver quanta diferença de desempenho havia.
Infelizmente, estou recebendo respostas diferentes, como mostrado abaixo:
Questão
Por que as respostas são diferentes em aproximadamente 2 milhões de linhas? Suponho que a consulta que realiza uma verificação completa da tabela seja o número mais preciso, mas existe uma maneira de obter o número correto sem precisar executar essa consulta lenta?
Eu corri ANALYZE TABLE data_302
, que foi concluído 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(*)
das 34906061 linhas. A tabela de análise retorna imediatamente e processa em segundo plano? Eu sinto que vale a pena mencionar que este é um banco de dados de teste e no momento não está sendo gravado.
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 "mesmo tamanho" para consultar o banco de dados em paralelo, semelhante ao método mostrado em Aumentando o desempenho lento da consulta com a execução da consulta paralela por Alexander Rubin. Sendo assim, vou obter 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.
NUM_ROWS
colum