3

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

Article.find_each(&:save)
4

3 回答 3

3

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

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。这是假设您想在保存记录之前进行某种形式的属性更新。

于 2012-08-15T07:29:00.060 回答
2

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

Article.find_each(:batch_size => 5000) { |r| r.save }
于 2012-08-15T07:31:40.073 回答
0

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

于 2012-08-15T07:30:01.457 回答