获取rails样本记录的最有效方法

时间:2013-02-08 23:03:05

标签: mysql ruby-on-rails

我的数据库中有大约2mil的记录,我需要经常获得随机的x记录集。当我的数据库包含我使用的大约50条记录时:

 Product.all.sample(5)

然而,由于我的记录很重要,这是非常昂贵的。

如何根据我的数据库大小有效地找到一小部分记录。

1 个答案:

答案 0 :(得分:1)

一种选择是获得更小的产品。你现在正在做的事情是昂贵的,因为你首先抓住所有产品然后随机选择其中的5个。

Product.limit(100).sample

这并不理想,因为您将返回相同的100套产品。

相反,您可以将.sample全部删除,只需向ActiveRecord询问5个产品的随机集

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

当您将性能问题从Rails中移出时,您已将其移至MySQL中,对于大型数据集,“RAND()”为still pretty slow

This question有很多关于你的问题的答案应该证明是有用的。