podívejte se na následující blogové příspěvky:
1) COUNT(***) vs COUNT(col)
2) Snadné tipy na výkon MySQL
3) Rychlé počítání(*) pro InnoDB
btw jaký motor používáš?
UPRAVENO: O technice pro urychlení počítání, když potřebujete vědět, zda existuje nějaké množství řádků. Omlouvám se, jen jsem se mýlil v mém dotazu. Takže, když potřebujete jen vědět, jestli existuje např. 300 řádků podle konkrétní podmínky můžete zkusit poddotaz:
select count(*) FROM
( select 1 FROM _table_ WHERE _conditions_ LIMIT 300 ) AS result
nejprve minifikujete sadu výsledků a poté spočítáte výsledek; stále bude skenovat sadu výsledků, ale můžete to omezit (ještě jednou, funguje to, když je otázka do DB „je zde více nebo méně než 300 řádků), a pokud DB obsahuje více než 300 řádků, které splňují podmínku, je dotaz rychlejší
Výsledky testování (moje tabulka má 6,7 milionů řádků):
1) SELECT count(*) FROM _table_ WHERE START_DATE > '2011-02-01'
vrátí 4,2 milionu po dobu 65,4 sekund
2) SELECT count(*) FROM ( select 1 FROM _table_ WHERE START_DATE > '2011-02-01' LIMIT 100 ) AS result
vrátí 100 na 0,03 sekundy
Níže je výsledek vysvětlujícího dotazu, abyste viděli, co se tam děje:
EXPLAIN SELECT count(*) FROM ( select 1 FROM _table_ WHERE START_DATE > '2011-02-01' LIMIT 100 ) AS result