以下のようなVALUESをいっぱい書いた感じのSQLです。
INSERT INTO <表名>
[ <列名> [ , <列名> ... ] ]
VALUES ( <値> [ , <値> ... ] ) ,
VALUES ( <値> [ , <値> ... ] ) ,
・・・
;
railsでは通常、普通のinsertが発行されてマルチプルinsertは使えません。
しかし、
ActiveRecord::Extensions
を使えばできちゃいます。
インストールは、
gem install ar-extensions
でOK。
そしてenvironment.rbに
config.gem 'ar-extensions'
を追加します。
そうすれば、importというメソッドが利用できるようになります。
使い方は、以下のような感じです。
columns = [ :author, :title ] values = [ [ 'araki', 'jojo' ],[ 'oda', 'onep' ] ] Book.import columns, values
ActiveRecord::Extensions
はマルチプルinsertだけでなく他にもいろいろ拡張されています。
詳しくは以下のサイトが参考になります。
http://d.hatena.ne.jp/yoshitetsu/20080129/1201610369
ちなみにrails3では、ActiveRecord::Extensions利用できなそうな気配なのですが、importだけならば
activerecord-import
というので、できる感じです。
activerecord-importは以下をご覧ください。
http://github.com/zdennis/activerecord-import/
ちなみに、このマルチプルinsertを使ってみた結果です。
500件まとめてinsertしてみました。
処理の前半で余計な前処理を結構しているので単純にinsert性能だけではないのですが、ご参考までに。
仕様前
件数 約3500件 Completed in 198245ms (DB: 10444)
件数 約10000件 Completed in 492626ms (DB: 21144)
使用後
件数 約3500件 Completed in 169225ms (DB: 8538)
件数 約10000件 Completed in 415683ms (DB: 16482)
0 件のコメント:
コメントを投稿