バルクINSERTとは
SQLが高速化することです。
つまり複数のINSERTを1つ文にまとめる
ことです。
ex)
何万件ものデータをDBに入れる時にバルクINSERTを知っていると便利。
INSERTが遅い理由は?
SQLのINSERTをたくさん行う場合をみていきます。
⚫︎バッチ処理
バッチ処理はひとまとまりのデータを一括して処理することです。
何千何万件ものINSERT処理をする時に使います。
⚫︎データ移行
これらの時にバルクINSERTが有効みたいです。
書き方
まず通常のINSERTの書き方です。
会社の社員データを想定します。
INSERT1文の場合です。
INSERT INTO staff(id1,id2) values('va1');
INSERT複数文の場合です。
INSERT INTO staff(id1,id2) values('va1','va2');
INSERT INTO staff(id1,id2) values('va1','va2');
INSERT INTO staff(id1,id2) values('va1','va2');
--・
-- ・
みたいな感じで永遠にINSERT文を書くことになります。
バルクINSERTを使うと
INSERT INTO staff(id1,id2) values('va1','va2');
values('va1','va2'),
values('va1','va2');
上のSQL文と比べたらだいぶコードが簡単になったかと思います。
どのくらい速いか
バルクINSERTを使うと20倍速くなるみたいです。
参考動画も参照してください。
なぜ速いのか
参考動画そのままになってしまうのですが、
ex)お店で水を5本買うとき、1本ずつ買うのと5本まとめたら5本まとめて買った方が
買い物は速いですよね?
こんなイメージです。
データベースでINSERTを実行するだけでもこんな手間があります。
1.DBとの接続をする
2.クエリを実行
3.レスポンスを受け取る
これらの作業があるのでデータが何千、何万あると時間がかかりますよね?
バルクINSERTを使う方が一括でまとめてできるので圧倒的に速いです。
バルクINSERTに注意点
・クエリには文字数制限があるみたいです。
・1000行ごとに区切るのがいいみたいです。
Load data infile
My SQLではCSVファイルをインポートできるみたいです。
Load data infile ファイル名
into table テーブル名;
https://qiita.com/tsukiwakka/items/3df3e14066a99e7323f9
この辺の記事を読んで参考にしてみてください。
参考資料
参考動画