kei0425tan’s blog

技術的なことを主に

DBのレコード追加について

2015/03課会資料

DBのレコード追加について

DBで大量にレコードを追加する場合、パフォーマンスが悪いことがよくあります。
そういった場合には以下を試してみましょう。後ろにあるほうが速くなります。

・通常のインサート
言語レベルでのループして、INSERTを必要な回数発行する。
・マルチプルインサート
ある程度レコードをまとめて、INSERTを行う。

INSERT INTO foo (id, name, country) VALUES(1, ‘taro’,’jpn’),(2, ‘jiro’,’usa’)…
※こちらの場合でもライブラリなどを確認してプレースフォルダを利用しましょう。
・バルクインサート
コマンドはDBによって異なります。ファイルなどから直接DBにレコードを挿入できます。ファイルの置き場はDBサーバに置かなくてはいけないのか、クライアントでよいのか異なるので注意。
MySQLではバルクインサートで検索するとマルチプルインサートがヒットしがちです。
・(おまけ)INSERT SELECT
可能であれば、クライアントにデータコピーせずにSELECTで挿入する。
ストアドでデータを作成すれば、SELECTで出力できるかもしれません。

下の2つはインデックス作成のほうが時間がかかる可能性も高いです。挿入前にINDEXを削除して、データ投入後に再度インデックスを張りなおすのも検討したほうがよいかもしれません。