2
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

データベースのバルクINSERTについて

Last updated at Posted at 2022-01-23

バルク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
この辺の記事を読んで参考にしてみてください。

参考資料

参考動画

2
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?