从Rails分组查询查询中获取随机记录

时间:2014-10-10 19:01:26

标签: ruby-on-rails ruby-on-rails-4 rails-activerecord

我有一个模型,我存储了大约250k个实例。如果我想获得一个随机实例,那么执行以下操作非常简单:

rand_offset = Random.new.rand(Model.count)
model = Model.limit(1).offset(rand_offset)

这很好用,随机偏移解析为快速COUNT(*)SQL查询。

但是,我还想获取一个涉及组子句的随机记录,例如:

rand_offset = Random.new.rand(Model.group(:field).having("COUNT(*)>?", minimum).count.count)
model = Model.group(:field).having("COUNT(*)>?", minimum).limit(1).offset(rand_offset)

这明显变慢,因为它不是在分组子查询上执行SELECT COUNT(*)来查找随机偏移量,而是返回与该查询匹配的每个记录,然后在随机化之前返回该数组的计数。当它返回数十万个结果时,这给了我一些明显的缓慢。有没有办法加速这个,而不是直接编写SQL?

0 个答案:

没有答案