2013-02-08 26 views
0

我的db中有大約2mil的記錄,而且我需要經常隨機獲取x個記錄集。當我的數據庫包含大約50條記錄時,我用:獲取rails示例記錄的最有效方法

Product.all.sample(5) 

但是,這是非常昂貴與我的記錄計數。

如何在給定db的大小的情況下有效地找到少量記錄樣本。

回答

0

一種選擇是獲得更小的一組產品。你現在做的事情是昂貴的,因爲你先抓取所有的產品,然後隨機選擇其中的5個。

Product.limit(100).sample 

這並不理想,但因爲您將返回相同的100組產品。

相反,你可以刪除.sample一起,只問了ActiveRecord的一組隨機的5個產品

Product.order("RAND()").limit(5) 

,雖然您在移動性能問題出鋼軌已移到了到MySQL,其中'對於大型數據集,RAND()'爲still pretty slow

This question有一堆有關您的問題應該證明有用的答案。

相關問題