разгледайте следните публикации в блога:
1) COUNT(***) срещу COUNT(col)
2) Съвети за лесна производителност на MySQL
3) Бързо броене(*) за InnoDB
btw, кой двигател използваш?
РЕДАКТИРАНО: Относно техниката за ускоряване на броенето, когато трябва просто да знаете дали има известно количество редове. Съжалявам, просто сгреших със запитването ми. Така че, когато просто трябва да знаете дали има напр. 300 реда по конкретно условие можете да опитате подзаявка:
select count(*) FROM
( select 1 FROM _table_ WHERE _conditions_ LIMIT 300 ) AS result
първо минимизирате набора от резултати и след това преброите резултата; той все още ще сканира набора от резултати, но можете да го ограничите (за пореден път работи, когато въпросът към DB е „тук е повече или по-малко от 300 реда) и ако DB съдържа повече от 300 реда, които отговарят на условието, че заявката е по-бърза
Резултати от тестване (моята таблица има 6,7 милиона реда):
1) SELECT count(*) FROM _table_ WHERE START_DATE > '2011-02-01'
връща 4,2 милиона за 65,4 секунди
2) SELECT count(*) FROM ( select 1 FROM _table_ WHERE START_DATE > '2011-02-01' LIMIT 100 ) AS result
връща 100 за 0,03 секунди
По-долу е резултат от заявката за обяснение, за да видите какво се случва там:
EXPLAIN SELECT count(*) FROM ( select 1 FROM _table_ WHERE START_DATE > '2011-02-01' LIMIT 100 ) AS result