MySQLインサートが遅いなと思ったらマルチプルインサートを試してみよう
Index
単純にインサートしているだけなのに、処理速度が遅くて困っているなら、マルチプルインサートで速度が改善されます。
私のケースでは、1万件弱をインサートしてみたら、6秒前後かかっていましたが、マルチプルインサートに変えたら1秒以下くらいで同件数をインサートすることができました。
以降、実際にマルチプルインサートを行う方法を書いてみたいと思います。
MySQLマルチプルインサートが早い
通常のインサート例。
insert into [tablename] ([col1],[col1],[col1]) values ([value1],[value2],[value3]);
複数行のマルチプルインサート例。
insert into [tablename] ([col1],[col1],[col1]) values ([value1],[value2],[value3]),([value1],[value2],[value3]),([value1],[value2],[value3]);
1クエリのサイズに気をつける
MySQLには1クエリのサイズに上限設定があります。
1クエリのサイズに気を付けないとエラーになります。
下記のクエリで1クエリに使えるサイズを調べることができます。
※単位はバイトです。
show variables like 'max_allowed_packet';
その場限りなら、下記のコマンドでサイズを増やすことができます。
set max_allowed_packet=[設定したい値];
恒久的にサイズを増やす場合は、/etc/my.cnfの下記を修正してください。
max_allowed_packet=16MB
設定変更後はMySQLサービスの再起動が必要です。
まとめ
単純に全件入れ替えるような処理は積極的にマルチプルインサートを使って行くことで、処理速度を改善できます。