我想從我的文章模型中獲取所有ID。我能做到這一點有兩種方式:ActiveRecords select(:id).collect vs. pluck(:id)方法:爲什麼純粹的AR「採摘」比較慢?
Article.select(:id).collect{|a| a.id}
Article Load (2.6ms) SELECT "articles"."id" FROM "articles"
OR
2.2.1 :006 > Article.pluck(:id)
(4.3ms) SELECT "articles"."id" FROM "articles"
是怎麼回事?爲什麼AR比Ruby版本慢?
即使我標杆紅寶石方法,它似乎更快:
Benchmark.measure{Article.select(:id).collect{|a| a.id}}
Article Load (1.9ms) SELECT "articles"."id" FROM "articles"
=> #<Benchmark::Tms:0x007feb12060658 @label="", @real=0.026455502957105637, @cstime=0.0, @cutime=0.0, @stime=0.0, @utime=0.020000000000000018, @total=0.020000000000000018>
您是否在測試時禁用數據庫和Rails堆棧中的緩存?您的數據庫中有多少條記錄?文章列表中是否有大的專欄(例如描述博客)? – spickermann
再次檢查您的基準測試:http://rubyinrails.com/2014/06/05/rails-pluck-vs-select-map-collect/ – Nathan
您CA真正做到這三路:「Article.all.collect {|一| a.id}「將是默認的Ruby方式,如果你對它進行基準測試,那麼你會發現它比較慢。你的第一個例子是完全Rubyish方法和爲速度優化的方法之間的中間方法。 –