我的数据库中有大约2mil的记录,我需要经常获得随机的x记录集。当我的数据库包含我使用的大约50条记录时:
Product.all.sample(5)
然而,由于我的记录很重要,这是非常昂贵的。
如何根据我的数据库大小有效地找到一小部分记录。
答案 0 :(得分:1)
一种选择是获得更小的产品。你现在正在做的事情是昂贵的,因为你首先抓住所有产品然后随机选择其中的5个。
Product.limit(100).sample
这并不理想,因为您将返回相同的100套产品。
相反,您可以将.sample
全部删除,只需向ActiveRecord询问5个产品的随机集
Product.order("RAND()").limit(5)
当您将性能问题从Rails中移出时,您已将其移至MySQL中,对于大型数据集,“RAND()”为still pretty slow。
This question有很多关于你的问题的答案应该证明是有用的。