過去30日間のテーブルのレコード数のグラフを表示したいと思います。cronジョブから毎日実行するrakeタスクを実行します。
テストをしたところ、奇妙な「問題」が見つかりました。Railsコンソールで次のコードを実行しました。
SeenEpisode.count
#=> (57135.2ms) SELECT COUNT(*) FROM `seen_episodes`
次に、MySQLコンソールでこれをテストしました。
use my_database;
SELECT COUNT(*) FROM seen_episodes;
1 row in set (3.94 sec)
このテーブルには2100万件のレコードがあります。
実際のパフォーマンス数値を取得するために、本番サーバーで両方のテストを実行しました。
約500kレコードのその他のテーブルでは、Railsコンソールで80〜300ミリ秒かかります。
Railsで21mの大きなテーブルを(同じクエリを使用して)カウントするのに、MySQLコンソールよりもはるかに長い時間がかかるのはなぜですか?