我需要为非常大的ActiveRecord集选择一个随机记录。
最好的方法是什么?我有类似的东西,但仍需要很长时间。
Model.select('id').where("id = ? AND attr = ?", self.id, false).offset(rand(size)).limit(1)
谢谢
答案 0 :(得分:0)
通常的技术依赖于生成一系列随机数,这些随机数表示记录的可能ID,并拉回相关行。
您通常需要读取最大(也可能是最小)ID,并在它们之间生成一堆随机数。你通常不能保证每个id都会存在,因此产生了很多(或每次循环一个新的随机数),直到你找到一个存在行的id。
答案 1 :(得分:-1)
Model.select('id').where("id = ? AND attr = ?", self.id, false).order("RANDOM()").first
似乎没问题,但我觉得有更好的方法。