2016-02-26 100 views
0

表中有4万条记录,我想分到4组。 第一种方式:使用mysql的两个分组选择方法,哪个更快,哪个更好?

def prepare_params(div, mod) 
    results = [] 
    Account.find_each do |account| 
     next unless account.id % div == mod 
     results << [account.id, account.name] 
    end 
    results 
    end 

secord方式:

def prepare_params(block, block_size) 
    results = Account.limit(block_size).offset(block_size * (block - 1)).pluck(:id, :name) 
    end 

这两使用MySQL的分组选择的方法,这是更快,哪个更好?

+0

['require'benchmark''](http://ruby-doc.org/stdlib-2.2.0/libdoc/benchmark/rdoc/Benchmark.html)。顺便说一句,第二个肯定更好,因为它不会在红宝石内部迭代40K记录。 – mudasobwa

回答

0

第二个将会更快更好,因为它将模型工作提供给数据库。

在第一次手动执行数据库作业时,没有索引并使用非专用算法。

当然,如果是一次性任务,没有太大的区别。发髻,如果是定期任务,你可以通过眼睛看到速度的提高,而不仅仅是综合测试。

另外,我应该提到,算法将提供不同的数据划分。第一个将分为1 2 3 4 1 2 3 4 1 2 3 4...,而第二个将提供1 1 1 1 1 1 1 1....其中数字是列,请记住它。