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

MySQL:maneira mais rápida de contar o número de linhas


Quando você COUNT(*) leva em índices de coluna de contagem, então será o melhor resultado. Mysql com MyISAM engine realmente armazena a contagem de linhas, ele não conta todas as linhas cada vez que você tenta contar todas as linhas. (com base na coluna da chave primária)

Usar o PHP para contar linhas não é muito inteligente, porque você precisa enviar dados do mysql para o php. Por que fazer isso quando você pode conseguir o mesmo no lado do mysql?

Se o COUNT(*) é lento, você deve executar EXPLAIN na consulta e verifique se os índices são realmente usados ​​e onde devem ser adicionados.

O seguinte não é o mais rápido maneira, mas há um caso, onde COUNT(*) realmente não se encaixa - quando você começa a agrupar resultados, você pode ter problemas, onde COUNT realmente não conta todas as linhas.

A solução é SQL_CALC_FOUND_ROWS . Isso geralmente é usado quando você está selecionando linhas, mas ainda precisa saber a contagem total de linhas (por exemplo, para paginação). Ao selecionar linhas de dados, basta anexar o SQL_CALC_FOUND_ROWS palavra-chave após SELECT:
SELECT SQL_CALC_FOUND_ROWS [needed fields or *] FROM table LIMIT 20 OFFSET 0;

Depois de selecionar as linhas necessárias, você pode obter a contagem com esta única consulta:
SELECT FOUND_ROWS();

FOUND_ROWS() deve ser chamado imediatamente após a consulta de seleção de dados.

Em conclusão, tudo se resume a quantas entradas você tem e o que está na instrução WHERE. Você deve realmente prestar atenção em como os índices estão sendo usados, quando há muitas linhas (dezenas de milhares, milhões e mais).