MySQLインサートが遅いなと思ったらマルチプルインサートを試してみよう
単純にインサートしているだけなのに、処理速度が遅くて困っているなら、マルチプルインサートで速度が改善されます。
私のケースでは、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 サービスの再起動が必要です。
まとめ
単純に全件入れ替えるような処理は積極的にマルチプルインサートを使って行くことで、処理速度を改善できます。