взгляните на следующие сообщения в блоге:
1) COUNT (***) против COUNT (столбец)
2) Easy MySQL Performance Tips
3) Быстрый подсчет (*) для InnoDB
Кстати, какой двигатель вы используете?
РЕДАКТИРОВАНИЕ: О технике ускорения счета, когда вам нужно просто знать, есть ли количество строк.Извините, просто не так с моим запросом.Таким образом, когда вам нужно просто знать, если, например, имеется 300 строк по конкретному условию, вы можете попробовать подзапрос:
select count(*) FROM
( select 1 FROM _table_ WHERE _conditions_ LIMIT 300 ) AS result
сначала вы минимизируете набор результатов, а затем подсчитываете результат;он все равно будет сканировать набор результатов, но вы можете ограничить его (еще раз, он работает, когда вопрос к БД «здесь больше или меньше 300 строк), и если БД содержит более 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