バルクインサートについては後述しますが、まずは手順
gem【activerecord-import】をインストールする
Gemfile
gem 'activerecord-import'
terminal
$ bundle install
バルクインサート処理
ここではわかりやすいようにカラム構成が全く同じ
Person1,Person2というモデルを使用します。
Person1の全データをPerson2に詰め替える処理を実装します。
Peson1,Peson2は以下のカラムを持ちます。
- name
- gender
# 配列の初期化、この配列にオブジェクトを詰めていく
array = []
# Person1のデータ元にPerson2のオブジェクトを作成し、それをarrayに詰めていく
Person1.all.each do |person|
array << Person2.new(name:person.name, gender:person.gender)
end
# バルクインサート処理
Person2.import array
以上!
バルクインサートとは
データを一括でDBにインサートする処理のこと
バルクインサートを使用せずに上記を実現しようとすると
Person1に入っているデータの数だけinsert文が発行されるので
件数が多いと処理が遅くなったり、負荷が大きくなったりします。
SQLを比較すると一目瞭然です。
バルクインサートを使わない
INSERT INTO Person2 (name, gender) VALUES ("幾三","男");
INSERT INTO Person2 (name, gender) VALUES ("よしみ","女");
INSERT INTO Person2 (name, gender) VALUES ("ジェロ","男");
バルクインサートを使うと
INSERT INTO Person2 (name, gender) VALUES ("幾三","男"),("よしみ","女"),("ジェロ","男");
バルクインサートを使用するとクエリの発行が1回になっています。