对数据映射器查询进行基准测试

时间:2012-11-12 14:06:37

标签: mysql ruby benchmarking datamapper

我正在使用datamapper并希望使用ruby基准库对一些查询进行基准测试。为了查看它是否有效,我开始使用一组,比较下面给出的methods described in datamapper docs

(1..1000).each do |i|
  i = Item.create :name => "item_#{i}", :weight => 0.5, :volume => 1.2, :price => 15
end

Benchmark.bmbm do |x|
  x.report("all:") { Item.all }
  x.report("name_only:") { Item.all :fields => [:name] }
  x.report("direct_talk_all:") { repository(:default).adapter.select('SELECT * FROM items') }
  x.report("direct_talk_name_only:") { repository(:default).adapter.select('SELECT name FROM items') }

并且令人惊讶(对我而言),实际结果分别为0,0.001,0.024和0.014。如果我使用特定于数据映射器的代码,选择性SELECT查询会花费更多时间,并且直接与数据存储直接对话时查询会花费更长时间,这听起来是错误的。

那么,我应该以这种方式继续进行基准测试,还是ruby基准库是一个错误的选择呢?

1 个答案:

答案 0 :(得分:2)

Item.all实际上并不执行查询,它会在需要之前延迟。使用Item.all.to_a强制进行查询。

相关问题