Quando você COUNT(*)
leva em índices de coluna de contagem, então será o melhor resultado. Mysql com mecanismo MyISAM realmente armazena 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ê tem que enviar dados do mysql para o php. Por que fazer isso quando você pode conseguir o mesmo no lado do mysql?
Se o COUNT(*)
for lento, você deve executar EXPLAIN
a consulta e verificar se os índices são realmente usados e onde devem ser adicionados.
O seguinte não é o caminho mais rápido , mas há um caso em COUNT(*)
que realmente não se encaixa - quando você começa a agrupar os resultados, pode ter problemas, ondeCOUNT
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 a 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ê realmente deve prestar atenção em como os índices estão sendo usados, quando há muitas linhas (dezenas de milhares, milhões e mais).
SELECT 1
e nãoSELECT *
. Existe alguma diferença?