När du COUNT(*)
den tar in index för antal kolumner, så det blir det bästa resultatet. Mysql med MyISAM motorn lagrar faktiskt radantal, den räknar inte alla rader varje gång du försöker räkna alla rader. (baserat på primärnyckelns kolumn)
Att använda PHP för att räkna rader är inte särskilt smart, eftersom du måste skicka data från mysql till php. Varför göra det när du kan uppnå samma sak på mysql-sidan?
Om COUNT(*)
är långsam bör du köra EXPLAIN
på frågan och kontrollera om index verkligen används och var ska de läggas till.
Följande är inte det snabbaste sätt, men det finns ett fall där COUNT(*)
passar inte riktigt - när du börjar gruppera resultat kan du stöta på problem, där COUNT
räknar inte riktigt alla rader.
Lösningen är SQL_CALC_FOUND_ROWS
. Detta används vanligtvis när du väljer rader men fortfarande behöver veta det totala radantalet (till exempel för personsökning). När du väljer datarader lägger du bara till SQL_CALC_FOUND_ROWS
nyckelord efter SELECT:
SELECT SQL_CALC_FOUND_ROWS [needed fields or *] FROM table LIMIT 20 OFFSET 0;
När du har valt önskade rader kan du få räkningen med denna enda fråga:
SELECT FOUND_ROWS();
FOUND_ROWS()
måste anropas omedelbart efter datavalsfrågan.
Sammanfattningsvis beror allt faktiskt på hur många poster du har och vad som står i WHERE-utlåtandet. Du bör verkligen vara uppmärksam på hur index används, när det finns många rader (tiotusentals, miljoner och uppåt).