首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >rails activerecord、mysql和mysql2性能下降?

rails activerecord、mysql和mysql2性能下降?
EN

Stack Overflow用户
提问于 2012-09-10 09:58:40
回答 1查看 912关注 0票数 3

我最近才从Rails 2.3.5升级到Rails 3.2.7,并且在我的一些查询中注意到一些性能下降。我知道Rails 3 ActiveRecord在某些情况下比Rails 2.3.5慢,但是我的基准测试让我感到惊讶,我只是想确保我没有遗漏任何东西。

作为基准测试,我运行了以下查询,这在我的应用程序中非常流行

代码语言:javascript
复制
SELECT SQL_NO_CACHE table_name.* FROM table_name WHERE ((string_col = 'value') AND (int_col1 BETWEEN 5 AND 30)) ORDER BY int_col2 DESC LIMIT 1000

我查过:

  • rails 3.2.7诉rails 2.3.5
  • rails 3.2.7与mysql适配器和mysql2的比较
  • ActiveRecord.find_by_sql对ActiveRecord.connection.select_all

结果

Rails 3.2.7

rails 3.2.7,mysql适配器,"select_all":avg。0.0148秒

rails 3.2.7,mysql适配器,"find_by_sql“avg。0.0555秒

rails 3.2.7,mysql2适配器"select_all":avg。0.045秒

rails 3.2.7,mysql2适配器,"find_by_sql“avg。0.088秒

Rails 2.3.5

rails 2.3.5,mysql适配器"select_all":avg。0.013秒

rails 2.3.5,mysql适配器"find_by_sql":avg。0.0177秒

虽然我的原始代码使用的是ActiveRecord查询api,但我使用硬编码的sql作为基准测试,并验证了直接从bash命令行调用mysql是稳定的,上面的数字来自rails/mysql适配器,而不是db。

问题

这些差异是否合理?

在Rails 3.2.7中,"find_by_sql“和"select_all”之间的差异要比Rails 2.3.5大得多。

为什么mysql2比mysql慢呢?

EN

回答 1

Stack Overflow用户

发布于 2012-11-02 00:23:03

我找到了这个博客帖子,它讨论了connection.select_all如何使用较低级别的数据库调用,从而消除了find_by_sql使用的一些高级库。

标准ActiveRecord API中的大多数调用都返回ActiveRecord“模型”对象。但是,在某些情况下,您可能希望绕过创建这些完整ActiveRecord对象的开销,或者您希望查询没有相应ActiveRecord类的数据。连接适配器的低级查询方法允许您编写自己的SQL,并将“普通旧数据”作为原始结果表返回。

关于mysql2 mysql2,mysql2宝石将返回转换为Ruby本身使用的更复杂的Ruby类型,而不是字符串或零。但是,如果需要这些,流或异步查询mysql2 gem的速度会更快。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12349318

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档