tag et kig på følgende blogindlæg:
1) COUNT(***) vs COUNT(col)
2) Easy MySQL Performance Tips
3) Hurtig optælling(*) for InnoDB
btw, hvilken motor bruger du?
REDIGERET: Om teknik til at fremskynde optællingen, når du bare skal vide, om der er nogle rækker. Beklager, det var bare forkert med min forespørgsel. Så når du lige skal vide, om der er f.eks. 300 rækker efter specifik tilstand kan du prøve underforespørgsel:
select count(*) FROM
( select 1 FROM _table_ WHERE _conditions_ LIMIT 300 ) AS result
først formindsker du resultatsættet og tæller derefter resultatet; det vil stadig scanne resultatsæt, men du kan begrænse det (en gang til, det virker, når spørgsmålet til DB er "er her mere eller mindre end 300 rækker), og hvis DB indeholder mere end 300 rækker, som opfylder betingelsen om, at forespørgslen er hurtigere
Testresultater (min tabel har 6,7 mio. rækker):
1) SELECT count(*) FROM _table_ WHERE START_DATE > '2011-02-01'
returnerer 4,2 mio. i 65,4 sekunder
2) SELECT count(*) FROM ( select 1 FROM _table_ WHERE START_DATE > '2011-02-01' LIMIT 100 ) AS result
returnerer 100 i 0,03 sekunder
Nedenfor er resultatet af forklaringsforespørgslen for at se, hvad der foregår der:
EXPLAIN SELECT count(*) FROM ( select 1 FROM _table_ WHERE START_DATE > '2011-02-01' LIMIT 100 ) AS result