0
我的db中有大約2mil的記錄,而且我需要經常隨機獲取x個記錄集。當我的數據庫包含大約50條記錄時,我用:獲取rails示例記錄的最有效方法
Product.all.sample(5)
但是,這是非常昂貴與我的記錄計數。
如何在給定db的大小的情況下有效地找到少量記錄樣本。
我的db中有大約2mil的記錄,而且我需要經常隨機獲取x個記錄集。當我的數據庫包含大約50條記錄時,我用:獲取rails示例記錄的最有效方法
Product.all.sample(5)
但是,這是非常昂貴與我的記錄計數。
如何在給定db的大小的情況下有效地找到少量記錄樣本。
一種選擇是獲得更小的一組產品。你現在做的事情是昂貴的,因爲你先抓取所有的產品,然後隨機選擇其中的5個。
Product.limit(100).sample
這並不理想,但因爲您將返回相同的100組產品。
相反,你可以刪除.sample
一起,只問了ActiveRecord的一組隨機的5個產品
Product.order("RAND()").limit(5)
,雖然您在移動性能問題出鋼軌已移到了到MySQL,其中'對於大型數據集,RAND()'爲still pretty slow。
This question有一堆有關您的問題應該證明有用的答案。