My Sweet Home

いつも笑顔で気持ちよく

MySQLのマルチプルインサートとバルクアップデート

大量のインサート処理、大量のアップデート処理。
「本当に大量に処理をする必要があるのか」という本質を検討した上で、どうしても必要なんです。という結果。

ループでinsertやupdateを回すと、その都度コストがかかり応答時間がかかってしまう。


そこでinsertはマルチプルインサート。
insertするvaluesをまとめて記載して、一回のinsertで処理するもの。

こことかここを参考に。

insert into [tablename] ([col1],[col1],[col1]) values ([value1],[value2],[value3]),([value1],[value2],[value3]),([value1],[value2],[value3]);


updateはバルクアップデート。
こちらもupdateするデータをまとめておいて、一回で処理するもの。

こことかここを参考に。

update [tablename] set [col1] = ELT(FIELD(id, 1, 2), [value1], [value2]), [col2] = ELT(FIELD(id, 1, 2), NOW()) where id in (1, 2)


どちらも一つのSQLにまとめて、一回の処理で終わらせるために爆速です。というより普通になります。

MySqlの文字列関数リファレンス
ELT, FIELDほかについて