LoginSignup
11
17

More than 5 years have passed since last update.

10秒で分かるrailsでバルクインサートする方法

Posted at

バルクインサートについては後述しますが、まずは手順

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回になっています。

11
17
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
11
17