【问题标题】:Rails console vs MySQL console - Counting rows in a huge tableRails 控制台与 MySQL 控制台 - 计算大表中的行数
【发布时间】:2012-10-07 04:14:03
【问题描述】:

我想显示一张图表,显示过去 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 万条记录。

我在生产服务器上运行了两个测试,以获得真实的性能数据。

其他大约 50 万条记录的表,在 Rails 控制台中需要 80-300 毫秒。

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

【问题讨论】:

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


    【解决方案1】:

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

    【讨论】:

    • 谢谢,它是 InnoDB,但为什么在 MySQL 控制台中速度如此之快?这是同一张表上的相同查询。
    • 您说您在两个不同的数据库上进行测试,其中第二个数据库“更大”。由于它必须计算行数,因此更大的表会导致更长的执行时间。
    • 抱歉有任何混淆,但两个测试都在同一个数据库和表上。
    • 好的。快速猜测 - 也许结果在您的查询缓存中?
    • 嗯,可能 :) 我想我必须忍受它。无论如何它都在后台运行。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-22
    • 2011-05-11
    • 1970-01-01
    • 1970-01-01
    • 2017-05-15
    相关资源
    最近更新 更多