从巨大的集合中选择第n个rails记录

时间:2016-02-25 01:01:40

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

我们的用户模型中有数千万条记录。我们的首席执行官想知道每个百万用户中谁是谁。我试图找到一种高效的方法来做到这一点。

如果我试图找到第1000万条记录,我已经尝试过了

User.select(:id).where(deleted_at:nil)[9999999]

User.find(User.last.id - User.where(deleted_at:nil).count + 9999999)

我试图通过finder方法修补find_nth方法,但这并没有以高效的方式工作。

我得到了"高性能"可能是一个延伸,但我对大多数有效的方式感兴趣。有什么建议吗?

1 个答案:

答案 0 :(得分:1)

您可以这样做:

User.order(:id).where(deleted_at:nil).offset(10_000_000).limit(1)

这将使你获得第1000万用户。然后,您可以遍历此操作,每次都增加偏移量,直到您停止获取用户为止。

您可以使用您想要的任何订单,例如created_at,但如果它不是索引列,那么它可能会很慢。