Když COUNT(*)
bere v úvahu indexy sloupců, takže to bude nejlepší výsledek. Mysql s MyISAM engine ve skutečnosti ukládá počet řádků, nepočítá všechny řádky pokaždé, když se pokusíte spočítat všechny řádky. (na základě sloupce primárního klíče)
Používat PHP k počítání řádků není moc chytré, protože do php musíte posílat data z mysql. Proč to dělat, když můžete dosáhnout stejného na straně mysql?
Pokud COUNT(*)
je pomalý, měli byste spustit EXPLAIN
na dotaz a zkontrolujte, zda jsou indexy skutečně používány a kam by měly být přidány.
Následující není nejrychlejší způsobem, ale existuje případ, kdy COUNT(*)
opravdu nesedí - když začnete seskupovat výsledky, můžete narazit na problém, kde COUNT
ve skutečnosti nepočítá všechny řádky.
Řešením je SQL_CALC_FOUND_ROWS
. To se obvykle používá, když vybíráte řádky, ale přesto potřebujete znát celkový počet řádků (například pro stránkování). Když vybíráte datové řádky, stačí připojit SQL_CALC_FOUND_ROWS
klíčové slovo po SELECT:
SELECT SQL_CALC_FOUND_ROWS [needed fields or *] FROM table LIMIT 20 OFFSET 0;
Poté, co vyberete potřebné řádky, můžete počet získat pomocí tohoto jediného dotazu:
SELECT FOUND_ROWS();
FOUND_ROWS()
musí být voláno ihned po dotazu na výběr dat.
Závěrem lze říci, že vše ve skutečnosti závisí na tom, kolik záznamů máte a co je v příkazu WHERE. Měli byste opravdu věnovat pozornost tomu, jak se indexy používají, když existuje mnoho řádků (desítky tisíc, miliony a více).