Rails + sqlite3 の落とし穴 (2) - ActiveRecord に大量データインポート
昨日の日記に関連して。 いや、落とし穴じゃなくて僕が無知なだけなんだけど。
元祖 サトシのブログ : SQLite の INSERT は遅いのか?より。
SQLite の処理は トランザクション の中でないと著しく遅い
ということで、 Rails で比較してみた。 1000件のデータを INSERT する処理を、トランザクションの有無で比べてみる。
$ script/performance/benchmarker \ '1000.times{|i| Item.create(:name => "test#{i}") }' \ 'Area.transaction{ 1000.times{|i| Item.create(:name => "test#{i}") } }' user system total real #1 3.330000 0.360000 3.690000 ( 30.918976) #2 3.530000 0.180000 3.710000 ( 3.829850)
トランザクション無しで30.9秒、有りで3.8秒。ほぼ1/10か。 ちなみに、 Rails のログには BEGIN TRANSACTION / COMMIT は残らないのね。 そういうもの?