Wanneer u COUNT(*)
het neemt telkolomindexen in beslag, dus het zal het beste resultaat zijn. Mysql met MyISAM engine slaat eigenlijk het aantal rijen op, het telt niet alle rijen elke keer dat u alle rijen probeert te tellen. (gebaseerd op de kolom van de primaire sleutel)
PHP gebruiken om rijen te tellen is niet erg slim, omdat je gegevens van mysql naar php moet sturen. Waarom zou je het doen als je hetzelfde kunt bereiken aan de mysql-kant?
Als de COUNT(*)
traag is, moet u EXPLAIN
uitvoeren op de zoekopdracht, en controleer of indexen echt worden gebruikt en waar ze moeten worden toegevoegd.
Het volgende is niet de snelste manier, maar er is een geval, waarbij COUNT(*)
past niet echt - wanneer u begint met het groeperen van resultaten, kunt u een probleem tegenkomen, waarbij COUNT
telt niet echt alle rijen.
De oplossing is SQL_CALC_FOUND_ROWS
. Dit wordt meestal gebruikt wanneer u rijen selecteert, maar nog steeds het totale aantal rijen moet weten (bijvoorbeeld voor paging). Wanneer u gegevensrijen selecteert, voegt u gewoon de SQL_CALC_FOUND_ROWS
toe trefwoord na SELECT:
SELECT SQL_CALC_FOUND_ROWS [needed fields or *] FROM table LIMIT 20 OFFSET 0;
Nadat u de benodigde rijen heeft geselecteerd, kunt u de telling krijgen met deze enkele vraag:
SELECT FOUND_ROWS();
FOUND_ROWS()
moet onmiddellijk na de gegevensselectiequery worden aangeroepen.
Kortom, alles komt eigenlijk neer op hoeveel items je hebt en wat er in het WHERE-statement staat. Je moet echt opletten hoe indexen worden gebruikt, wanneer er veel rijen zijn (tienduizenden, miljoenen en meer).