データベースで ~ 1.300.000 レコードを変換する必要があります。これより速い方法を知っていますか?
Article.find_each(&:save)
データベースで ~ 1.300.000 レコードを変換する必要があります。これより速い方法を知っていますか?
Article.find_each(&:save)
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
、それらに対して実行できます。これは、レコードを保存する前に何らかの形式の属性更新を行うことを想定しています。
バッチのレコード数を増やすことができます (デフォルトは 1000)。この数は、サーバーにあるメモリの量によって異なります。
Article.find_each(:batch_size => 5000) { |r| r.save }
作成している場合は、activerecord-import のような gem で一括挿入する必要があります。更新する場合は、update_allを使用してください。