我们的用户模型中有数千万条记录。我们的首席执行官想知道每个百万用户中谁是谁。我试图找到一种高效的方法来做到这一点。
如果我试图找到第1000万条记录,我已经尝试过了
User.select(:id).where(deleted_at:nil)[9999999]
和
User.find(User.last.id - User.where(deleted_at:nil).count + 9999999)
我试图通过finder方法修补find_nth
方法,但这并没有以高效的方式工作。
我得到了"高性能"可能是一个延伸,但我对大多数有效的方式感兴趣。有什么建议吗?
答案 0 :(得分:1)
您可以这样做:
User.order(:id).where(deleted_at:nil).offset(10_000_000).limit(1)
这将使你获得第1000万用户。然后,您可以遍历此操作,每次都增加偏移量,直到您停止获取用户为止。
您可以使用您想要的任何订单,例如created_at
,但如果它不是索引列,那么它可能会很慢。