在mongoid db中采用vs distinct。 哪个更快?

似乎mongodb有两个等价的方法:

#pluck和#distinct都只返回集合中的给定字段。

所以两者

User.pluck(:name) User.distinct(:name) 

将从db中的User集合返回所有名称的数组

 > ['john', 'maria', 'tony', 'filip'] 

我不介意重复。 哪种方法更快?

让我们运行一个基准!

 require 'benchmark' 1_200.times { FactoryGirl.create(:user) } Benchmark.bmbm(7) do |bm| bm.report('pluck') do User.pluck(:email) end bm.report('pluck.uniq') do User.pluck(:email).uniq end bm.report('only.pluck') do User.only(:email).pluck(:email) end bm.report('only.pluck.uniq') do User.only(:email).pluck(:email).uniq end bm.report('distinct') do User.distinct(:email) end bm.report('only.distnct') do User.only(:email).distinct(:email) end end 

哪个输出:

 Rehearsal ------------------------------------------------ pluck 0.010000 0.000000 0.010000 ( 0.009913) pluck.uniq 0.010000 0.000000 0.010000 ( 0.012156) only.pluck 0.000000 0.000000 0.000000 ( 0.008731) distinct 0.000000 0.000000 0.000000 ( 0.004830) only.distnct 0.000000 0.000000 0.000000 ( 0.005048) --------------------------------------- total: 0.020000sec user system total real pluck 0.000000 0.000000 0.000000 ( 0.007904) pluck.uniq 0.000000 0.000000 0.000000 ( 0.008440) only.pluck 0.000000 0.000000 0.000000 ( 0.008243) distinct 0.000000 0.000000 0.000000 ( 0.004604) only.distnct 0.000000 0.000000 0.000000 ( 0.004510) 

它清楚地表明使用#distinct几乎是#pluck