使用arel / rails为大型记录集选择一个随机记录

时间:2014-02-01 16:30:19

标签: ruby-on-rails activerecord arel

我需要为非常大的ActiveRecord集选择一个随机记录。

最好的方法是什么?我有类似的东西,但仍需要很长时间。

Model.select('id').where("id = ? AND attr = ?", self.id, false).offset(rand(size)).limit(1)

谢谢

2 个答案:

答案 0 :(得分:0)

通常的技术依赖于生成一系列随机数,这些随机数表示记录的可能ID,并拉回相关行。

您通常需要读取最大(也可能是最小)ID,并在它们之间生成一堆随机数。你通常不能保证每个id都会存在,因此产生了很多(或每次循环一个新的随机数),直到你找到一个存在行的id。

答案 1 :(得分:-1)

Model.select('id').where("id = ? AND attr = ?", self.id, false).order("RANDOM()").first

似乎没问题,但我觉得有更好的方法。