2016-02-26 57 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....其中數字是列,請記住它。