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).