更快的保存方法?

3

我必须对我的数据库进行约130万条记录的转换。你知道比这更快的方法吗?

Article.find_each(&:save)

你需要发出关联的回调吗? - tokland
3个回答

3
如果您想要更新表中的单个字段,可以在您的 ActiveRecord 模型上使用 update_all
Post.update_all(:published=>true)
# UPDATE "posts" SET "published" = 't'

这同样适用于 ActiveRecord 的作用域(scopes)。
Post.where(:published=>true).update_all(:published=>false) 
# SQL (3.3ms)  UPDATE "posts" SET "published" = 'f' WHERE "posts"."published" = 't'

通过使用这个方法,你可以使用条件语句(如where)来挑选出表中共同的行,并对它们执行update_all。假设在保存记录之前,你想要进行某种形式的属性更新。

2

您可以批量增加记录数(默认值为1000),这个数字取决于您的服务器有多少内存:

Article.find_each(:batch_size => 5000) { |r| r.save }

0

如果你正在创建数据,你需要使用像activerecord-import这样的 gem 进行批量插入。如果你正在更新数据,只需使用update_all


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接