更快的保存方法?

时间:2012-08-15 07:20:22

标签: ruby-on-rails ruby performance activerecord

我必须在我的数据库中转换~1.300.000记录。 你知道一种比这更快的方法吗?

Article.find_each(&:save)

3 个答案:

答案 0 :(得分:3)

如果您要更新表格中的单个字段,可以在ActiveRecord模型上使用update_all

Post.update_all(:published=>true)
# UPDATE "posts" SET "published" = 't'

这也适用于ActiveRecord范围。

Post.where(:published=>true).update_all(:published=>false) 
# SQL (3.3ms)  UPDATE "posts" SET "published" = 'f' WHERE "posts"."published" = 't'

通过使用它,您可以使用条件语句(例如where)来挑选表中的常用行并对其执行update_all。这假设您希望在保存记录之前进行某种形式的属性更新。

答案 1 :(得分:2)

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

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

答案 2 :(得分:0)

如果您正在创建,则需要使用activerecord-import之类的宝石批量插入。如果您要更新,请使用update_all