É mais rápido quando eu uso o nome da coluna indexada em vez de *? Assim: SELECT COUNT (id) FROMtablename
1
Só um pouco. Recebi uma tabela de linhas 21961904 que sua COUNT consultou em 115 segundos, enquanto o ID demorava 107 segundos.
Bondolin
2
COUNT (*) é uma definição estrita de idioma. Você receberá um erro de análise se tentar COUNT (*) anotar o espaço
ppostma1
9
Você pode fazer COUNT(1), este será o caminho mais rápido.
Shota Papiashvili 14/09/16
Qual é a melhor maneira de usar COUNT () para escrever uma variável em PHP? Eu faço "... COUNT (*) AS rowCount ..." no SQL, ele usa $ results-> num_rows, ou existe uma maneira de chamar esse resultado diretamente?
Nosajimiki
71
Porque ninguém mencionou:
show table status;
lista todas as tabelas junto com algumas informações adicionais, incluindo linhas estimadas para cada tabela. É isso que o phpMyAdmin está usando na página do banco de dados.
Esta informação está disponível no MySQL 4, provavelmente no MySQL 3.23 - banco de dados de esquemas de informações anteriores há muito tempo.
ATUALIZAR:
Como houve voto negativo, quero esclarecer que o número mostrado é estimado para InnoDB e TokuDB e é absolutamente correto para os mecanismos de armazenamento MyISAM e Aria (Maria).
O número de linhas. Alguns mecanismos de armazenamento, como o 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.
Essa também é a maneira mais rápida de ver a contagem de linhas no MySQL, porque consultas como:
select count(*)fromtable;
Fazendo uma varredura completa da tabela, o que poderia ser uma operação muito cara, que pode levar horas em um servidor grande de carga alta. Também aumenta a E / S do disco.
A mesma operação pode bloquear a tabela de inserções e atualizações - isso acontece apenas em mecanismos de armazenamento exóticos.
O InnoDB e o TokuDB estão bem com o bloqueio de tabela, mas precisam de uma verificação completa da tabela.
Parece a maneira mais eficiente de contar linhas. Eu me pergunto por que não é a resposta? Estou usando o InnoDB. Com o bloqueio de tabela, o número de linhas deve ser exato, certo?
Chung Lun Yuen
para innodb é estimado . mas você pode usá-lo em alguns casos "Nosso site tem xxx membros", "Detectamos resultados xxx semelhantes aos seus" e assim por diante.
27416 Nick
Não tenho certeza. mas para Innodb não é contagem real. Mas é bastante útil para milhões de tabelas de linhas.
28416 Nick
4
Passar pelas tabelas para contar cada linha para obter uma contagem de linhas é bastante ridículo. Então, eu prefiro essa resposta também.
Th3penguinwhisperer
35
Temos outra maneira de descobrir o número de linhas em uma tabela sem executar uma selectconsulta nessa tabela.
Toda instância do MySQL possui banco de dados information_schema. Se você executar a consulta a seguir, fornecerá detalhes completos sobre a tabela, incluindo o número aproximado de linhas nessa tabela.
select*from information_schema.TABLES where table_name ='table_name'\G
Se você tiver vários campos em sua tabela e sua tabela for enorme, é melhor NÃO UTILIZAR,* pois carrega todos os campos na memória e, usando o seguinte, terá melhor desempenho
Isso pode retornar um número estimado de linhas. Em um exemplo, obtive 55.940.343 linhas usando COUNT (*), mas 56.163.339 usando esse método, de modo que foi desativado em mais de 200k.
jcoffland
@ jcoffland, mencionei a resposta de _ Santosh_ acima da qual afirma que o resultado é aproximado . Minha resposta é uma consulta prática mais detalhada. Sua bastante claro em toda respostas, se você quer o uso contagem precisa count(*)com a consciência desempenho
Mohammad Kanan
1
$sql="SELECT count(*) as toplam FROM wp_postmeta WHERE meta_key='ICERIK' AND post_id=".$id;$total =0;$sqls = mysql_query($sql,$conn);if($sqls ){$total = mysql_result($sqls,0);};
echo "Total:".$total;`
tablename
COUNT(1)
, este será o caminho mais rápido.Porque ninguém mencionou:
lista todas as tabelas junto com algumas informações adicionais, incluindo linhas estimadas para cada tabela. É isso que o phpMyAdmin está usando na página do banco de dados.
Esta informação está disponível no MySQL 4, provavelmente no MySQL 3.23 - banco de dados de esquemas de informações anteriores há muito tempo.
ATUALIZAR:
Como houve voto negativo, quero esclarecer que o número mostrado é estimado para InnoDB e TokuDB e é absolutamente correto para os mecanismos de armazenamento MyISAM e Aria (Maria).
De acordo com a documentação :
Essa também é a maneira mais rápida de ver a contagem de linhas no MySQL, porque consultas como:
Fazendo uma varredura completa da tabela, o que poderia ser uma operação muito cara, que pode levar horas em um servidor grande de carga alta. Também aumenta a E / S do disco.
A mesma operação pode bloquear a tabela de inserções e atualizações - isso acontece apenas em mecanismos de armazenamento exóticos.
O InnoDB e o TokuDB estão bem com o bloqueio de tabela, mas precisam de uma verificação completa da tabela.
fonte
Temos outra maneira de descobrir o número de linhas em uma tabela sem executar uma
select
consulta nessa tabela.Toda instância do MySQL possui banco de dados information_schema. Se você executar a consulta a seguir, fornecerá detalhes completos sobre a tabela, incluindo o número aproximado de linhas nessa tabela.
fonte
Simplesmente:
fonte
fonte
Basta fazer um
Você pode especificar condições com um Onde depois disso
fonte
Se você tiver vários campos em sua tabela e sua tabela for enorme, é melhor NÃO UTILIZAR,
*
pois carrega todos os campos na memória e, usando o seguinte, terá melhor desempenhofonte
Como mencionado por Santosh , acho que essa consulta é adequadamente rápida, embora não esteja consultando toda a tabela.
Para retornar o resultado inteiro do número de registros de dados, para um nome de tabela específico em um banco de dados específico :
fonte
count(*)
com a consciência desempenhofonte
Você precisa usar count () retorna o número de linhas que correspondem a um critério especificado
fonte
Se você possui uma chave primária ou uma chave / índice exclusivo, o método mais rápido possível (testado com 4 milhões de tabelas de linhas)
e, em seguida, obtenha o campo de cardinalidade (é quase instantâneo)
Tempos em que 0,4s a 0,0001ms
fonte