我希望在我的应用程序中对几个ActiveRecord请求进行基准测试。在控制台中进行基准测试的最简单方法是什么
User.find_by_name("Joe").id对比
User.find(:first, :select => :id, :conditions => ["name = ?","Joe"]).id谢谢
发布于 2010-08-06 10:02:25
使用脚本/性能/基准测试:
script/performance/benchmarker 2000 "User.find_by_name('Joe').id" "User.first(:conditions => {:name => 'Joe'}, :select => 'id').id"在我的dev机器上,它报告:
user system total real
#1 1.110000 0.070000 1.180000 ( 1.500366)
#2 0.800000 0.050000 0.850000 ( 1.078444)因此,第二种方法似乎更快,因为它有更少的工作要做。当然,您应该在您的生产机器上使用生产环境对其进行基准测试:
RAILS_ENV=production script/performance/benchmarker 2000 "User.find_by_name('Joe').id" "User.first(:conditions => {:name => 'Joe'}, :select => 'id').id"它可能会为您改变一些条件。
发布于 2013-11-02 11:34:58
这个问题有点陈旧,需要一个更新的答案。在生产场景之外对查询进行基准测试的最简单方法是在rails console中运行它(基准脚本不再位于Rails中)。然后,您可以简单地使用内置于Ruby中的Benchmark类进行测试。在Rails中运行以下命令:
puts Benchmark.measure { User.find_by_name("Joe").id }
puts Benchmark.measure { User.find(:first, :select => :id, :conditions => ["name = ?","Joe"]).id }我会运行上述5次,去掉最小值和最大值,然后取其余三次运行的平均成本,以确定哪个查询会给您带来更好的性能。
这是自Rails doesn't show you the cost to actually construct your objects以来获得查询真实成本的最准确的解决方案。因此,虽然@Slobodan Kovacevic答案是正确的,因为日志显示了查询的日志记录,但long不会为您提供对象构造时间,这可能会缩短第二次查询的时间,因为您只填充了单个字段而不是所有用户字段。
发布于 2010-08-06 05:26:53
在开发模式中,每个查询都计时并记录在log/development.log中。您将具有类似于以下代码的代码:
Ad Load (1.4ms) SELECT "ads".* FROM "ads" ORDER BY created_at DESChttps://stackoverflow.com/questions/3419220
复制相似问题