2013-02-08 56 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有一堆有关您的问题应该证明有用的答案。

相关问题