我的数据库中有大约 200 万条记录,我需要经常获取随机的 x 记录集。当我的数据库包含大约 50 条记录时,我使用了:
Product.all.sample(5)
然而,这对于我的记录数量来说是非常昂贵的。
给定我的数据库大小,如何有效地找到一小部分记录样本。
我的数据库中有大约 200 万条记录,我需要经常获取随机的 x 记录集。当我的数据库包含大约 50 条记录时,我使用了:
Product.all.sample(5)
然而,这对于我的记录数量来说是非常昂贵的。
给定我的数据库大小,如何有效地找到一小部分记录样本。
一种选择是获得一组更小的产品。您现在所做的事情代价高昂,因为您首先获取所有产品,然后随机选择其中的 5 个。
Product.limit(100).sample
这并不理想,因为您将返回相同的 100 个产品集。
相反,您可以一起删除.sample
所有内容,只需向 ActiveRecord 索取一组随机的 5 个产品
Product.order("RAND()").limit(5)
虽然您已将性能问题移出 Rails,但您已将其移至 MySQL,其中“RAND()”对于大型数据集仍然相当慢。
这个问题有一堆与您的问题相关的答案,应该证明是有用的。