Rails控制台与MySQL控制台 - 计算巨大的表中的行

时间:2012-10-05 21:03:08

标签: mysql ruby-on-rails-3 performance

我想在过去30天内显示一张表有多少条记录的图表。我将做一个rake任务,我将每天从一个cron工作。

我刚做了一个测试,我发现了一个奇怪的“问题”。 我在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-300ms。

为什么在Rails中对21m大表进行计数(使用相同的查询)比在MySQL控制台中花费的时间长得多?

1 个答案:

答案 0 :(得分:1)

我猜你会在INNODB上,其中count(*)没有被缓存。