【发布时间】:2012-09-03 04:18:50
【问题描述】:
我最近才从 Rails 2.3.5 升级到 Rails 3.2.7,并注意到我的一些查询出现了一些性能下降。我知道 Rails 3 ActiveRecord 在某些情况下比 Rails 2.3.5 慢,但基准测试让我感到惊讶,我只是想确保我没有遗漏任何东西。
我运行了以下在我的应用程序中非常流行的查询作为基准
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 vs ActiveRecord.connection.select_all
结果
导轨 3.2.7
rails 3.2.7,mysql 适配器,“select_all”:平均。 0.0148 秒
rails 3.2.7,mysql 适配器,“find_by_sql”平均值。 0.0555 秒
rails 3.2.7,mysql2 适配器,“select_all”:平均。 0.045 秒
rails 3.2.7,mysql2 适配器,“find_by_sql”平均值。 0.088 秒
导轨 2.3.5
rails 2.3.5,mysql 适配器“select_all”:平均。 0.013 秒
rails 2.3.5,mysql适配器“find_by_sql”:平均。 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慢?
【问题讨论】:
标签: mysql performance activerecord ruby-on-rails-3.2 mysql2