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

まとめ

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