在ruby中找到每个增加查询的速度

时间:2015-07-29 06:20:39

标签: mysql ruby-on-rails ruby sinatra

我想每天从我们的数据库中删除大约500万条或更多的记录,这些记录实际上是已过期的用户。

我用过" find_each"批处理过程删除这些记录,但它需要1天才能删除100万条记录,因此需要5天才能删除500万条记录:(这太费时间了。

有没有快速方法可以安全地从ruby中删除数据库中的数百万条记录。

这是我的代码:

now = Date.today
@expired_users = ExportUser.where("status != ? and DTSysModified >= ? and DTSysModified <= ?", "Active", Date.new(now.year, 04, 1),  Date.new(now.year, 04, -1))

@expired_users.find_each(batch_size: 10000) do |user|
  user.destroy!
end

1 个答案:

答案 0 :(得分:3)

delete_all可以更快地完成工作:

@expired_users.delete_all

仅当您要在删除对象时执行所有关联的回调时才使用destroy