猫型iPS細胞研究所

Windows、Linux、iOS、DB、Network

DataBase MySQL

MySQLの連続INSERTを高速にする

投稿日:

もししらなければ確実に、そして恐ろしく効果を発揮できると思います。

INSERTを連続実行する際にボトルネックとなるのはコミットです。
オートコミットをオフにするという手もあるのですが、
INSERTをまとめることで、コミットの回数を減らすだけでも確実に効果があるはずです。

具体的には

insert into TABLE_NAME(col1,col2,col3) vaues ('aaa1','bbb1','ccc1');
insert into TABLE_NAME(col1,col2,col3) vaues ('aaa2','bbb2','ccc2');
insert into TABLE_NAME(col1,col2,col3) vaues ('aaa3','bbb3','ccc3');

とある場合は

insert into TABLE_NAME(col1,col2,col3) vaues ('aaa1','bbb1','ccc1'),('aaa2','bbb2','ccc2'),('aaa3','bbb3','ccc3');

とすればよいのです。

私の場合、4万件が約3分かかっていたのが、
20件毎にまとめるだけで約8秒になりました。
20倍以上の効果がありました!

もちろん環境や設定によりまとめる数は調整が必用と思われます。

INSETが遅すぎてお困りのかた。
是非お試しください!!

Gooleアドセンス用336

Gooleアドセンス用336

-DataBase, MySQL
-

執筆者:

関連記事

mysql

MySQLの予約語はバッククォーテーション囲んで使用する

列名に”from”や”to”を使用したいことがあるはずです。 そうした場合は”`”(バッククォーテーション)で囲みましょう。 insert into m …

mysql

MySQL ERROR: Can’t connect to MySQL server on ‘xxx.xxx.x.xx’ (13)

MySQL ERROR: Can’t connect to MySQL server on ‘xxx.xxx.xxx.xxx’ (13) はSELinuxによる接続 …

mysql

MySQLでフラグの列でSELECTする。(複合インデックスの使用条件)

status=’1’とかdelete=’0’といった条件はよく使用することでしょう。 そこでフラグにはどのデータ型がベストなのでしょうか。 INDEX1 …

sqlserver

SQLSERVER インストール後にDataをDドライブ(別ドライブへ)移動する方法

通常OSはCドライブ、データはDドライブなどの別ドライブを使用します。 SQLSERVERではデータの肥大化が起こりうる実データファイル(mdfやldf)をCドライブ以外に変更したい場面は多いはずです …

mysql

MySQLのChar型は”(ダブルクォーテーション)ではなく'(シングルクォーテーション)でSELECT

タイトルの通り MySQLのChar型は”(ダブルクォーテーション)ではなく'(シングルクォーテーション)で囲ってSELECT しなければなりません。 正確には、そうしなければパフォーマン …