MySQLインサートが遅いなと思ったらマルチプルインサートを試してみよう

2018.3.13

単純にインサートしているだけなのに、処理速度が遅くて困っているなら、マルチプルインサートで速度が改善されます。

私のケースでは、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サービスの再起動が必要です。

まとめ

単純に全件入れ替えるような処理は積極的にマルチプルインサートを使って行くことで、処理速度を改善できます。