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

标签 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-300 毫秒。

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

最佳答案

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

关于mysql - Rails 控制台与 MySQL 控制台 - 计算大表中的行数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12753988/

相关文章:

javascript - 如何在 Javascript 数组中存储 MySQL 日期?

mysql - 为什么我的字符串到十进制转换在 Mysql 中失败

ruby-on-rails - 设计 - 快速通知

ruby-on-rails - ruby 无法在 .js.coffee 中的 coffeescript 之后进行 ajax 响应

python - 高效添加多个系列?

c# - 如何以最有效的方式返回 List<int> 中两个最大值的总和? C#

c# - 使用 C# 将文件存储在数据库中并从 PHP 检索

mysql - 根据其他表行更新行

ruby-on-rails - 如何用Rails 3定义自己的服务器

.net - 检索/存储数百万个小型二进制对象的最快方法