次のブログ投稿をご覧ください:
1) COUNT(***)vs COUNT(col)
2)MySQLパフォーマンスの簡単なヒント
3) InnoDBの高速カウント(*)
ところで、どのエンジンを使用していますか?
編集済み: 行数がいくらかあるかどうかを知る必要がある場合に、カウントを高速化する手法について。申し訳ありませんが、私のクエリが間違っていました。だから、あなたがただ知る必要があるとき、例えばあるかどうか。サブクエリを試すことができる特定の条件による300行:
select count(*) FROM
( select 1 FROM _table_ WHERE _conditions_ LIMIT 300 ) AS result
最初に結果セットを縮小し、次に結果をカウントします。結果セットは引き続きスキャンされますが、制限することができます(もう一度、DBへの質問が「ここでは300行より多いまたは少ない」である場合に機能します)。DBに300行を超える場合は、クエリが高速であるという条件を満たす。
テスト結果(私のテーブルには6.7mln行あります):
1)SELECT count(*) FROM _table_ WHERE START_DATE > '2011-02-01'
は4.2mlnを65.4秒間返します
2)SELECT count(*) FROM ( select 1 FROM _table_ WHERE START_DATE > '2011-02-01' LIMIT 100 ) AS result
は100を0.03秒間返します
以下は、そこで何が起こっているかを確認するためのExplainクエリの結果です。
EXPLAIN SELECT count(*) FROM ( select 1 FROM _table_ WHERE START_DATE > '2011-02-01' LIMIT 100 ) AS result