猫型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が起動できない

エラーログには下記ログが大量に出力されて起動できない・・・。 2013-08-22 17:32:10 30137 [ERROR] InnoDB: Unable to lock ./ibdata1, e …

mysql

MySQL:エラー:The total number of locks exceeds the lock table size

The total number of locks exceeds the lock table sizeは、大量にデータを削除する場合等に発生する可能性があります。 見ての通り、ロックするメモリー不 …

mysql

MySQL load dataでcsvをインサートする

かなり高速でinsertしてくれます。 INDEX1 使い方2 ERROR 10453 [補足]insertを高速にする 使い方 MySQLにログインして、データベースを指定して実行します。 mysq …

sqlserver

SQLSERVER saでログインできるようにする

私はsaも設定しておくべきだと思います。 そこでsaログインするための確認ポイントです。 INDEX1 ログインを有効にする2 サーバー認証の設定3 名前付きパイプ ログインを有効にする Manage …

mysql

MySQLの時間のフォーマット

MySQLのdatetime型はそのままSELECTすると、 2013-05-15 13:45:59 のように表示されてしまいます。 yyyy-mm-ddではなく、yyyy/mm/dd がいい場合もあ …