0

過去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コンソールよりもはるかに長い時間がかかるのはなぜですか?

4

1 に答える 1

1

count(*)がキャッシュされていないINNODBを使用していると思います。

于 2012-10-05T23:06:24.260 に答える