0

我正在使用 datamapper 并想使用 ruby​​ 基准库对一些查询进行基准测试。为了查看它是否有效,我从一组开始,比较datamapper 文档中描述的方法,如下所示:

(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​​ 基准库是一个错误的选择?

4

1 回答 1

2

Item.all实际上并没有进行查询,它会延迟到需要时。用于Item.all.to_a强制查询。

于 2012-11-13T06:13:33.853 回答