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