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ほかについて