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

utilitiesのmysqlfailoverを使う(2)

前回の utilitiesのmysqlfailoverを使う(1)で設定・起動は完了しています。 私の目的は2台のMySQLサーバーを定期的に入れ替えてメンテナンスすることです。 今回はマスターがダウ …

mysql

MySQLのmysqldumpのエクスポートとインポート

ダンプはバックアップやテストに大活躍してくれます。 しかし、データベース単位でエクスポートしても、インポートには随分時間がかかったりします。 その辺は別の機会にしますが、今回は基本コマンドのまとめです …

mysql

CentOS6.4にMySQL5.6をインストールする

INDEX1 RPMのダウンロード2 tarの解凍3 rpmをyumでインストール4 サービス名が違う?5 mysql_secretにrootの初期パスワードはある6 mysql_secure_ins …

mysql

SQLで時間の重複をチェックする

同じ期間のデータは事前にチェックしてエラーにするという処理は、 あらゆる場面で想定されそうなことですが、 以外と難しかったのでここに方法をのこしておきます。 他にも素晴らしい方法があると思いますが、 …

sqlserver

SQL Server Management Studio でテーブルが変更できない

私は以前はOracleをメインで使用し、そしてここ数年間はMySQLをメインで使用しています。SQL Serverは少しかじった程度といえるでしょう。 こんな私が選択したのはSQL Server Ma …