複数行を追加するためのinsert文


何件かのレコードをデータベースへ追加しようとしてるときとかって、
追加の処理を複数回呼び出すと、
オーバーヘッドが大きくなりすぎると思ったので、
一回の呼び出しで、複数行が追加できる方法はないかと探してみました。



すると以下の構文があるそうで、

insert into テーブル名 values(...);
insert into テーブル名 values(...);


単純にセミコロンで区切ってやればいいんだと


で、もう少し調べてたらもう一つの書き方もありました。

insert into テーブル名 values(...),(...), ... ,(...);

(...)の中に1件ずつのデータを入れる


で、どちらの方が効率的かを調べたページがありました。


MySQL 1クエリにおける複数行 INSERT の効果
http://ossipedia.ipa.go.jp/capacity/EV0603280114/


これによると、後者の方法が早いようです。


で、どれくらいの量のSQL文を発行できるかというと


■[MySQL][Connector/J] 送信可能クエリ長制限について
http://d.hatena.ne.jp/mir/20060207/p1

現時点(Connector/J 5.0)において,送信可能なクエリの長さの最大値は"sign 2^32 = 2G"です.この長さは文字数ではなく,バイトサイズです.従ってマルチバイトの文字コードを使用している場合には,送れる文字数はそのマルチバイト分だけ除算されるものと思ってください.

Javaの場合は、2GBくらい送れそうですね。