SQLが20倍も速くなる?バルクインサート(BULK INSERT)とは

せお丸のプログラマー養成講座【サイバーフリークス株式会社】
2 Nov 202009:07

Summary

TLDRこの動画では、データベースの大量insert処理を劇的に高速化する「バルクインサート」技術について解説しています。通常のinsert文をまとめて一度に実行することで、処理時間を大幅に短縮できると同時に、バルクインサートの注意点や、より高速なデータインポート方法である「load data infile」についても紹介しています。プログラマーが効率的にデータを扱えるよう、実践的なテクニックを提供する内容です。

Takeaways

  • 😀 バルクインサートは、SQLのinsert処理を劇的に高速化する方法です。
  • 📈 知っていることによって、大量のCSVデータを効率的にデータベースにインポートできます。
  • 🔑 バルクインサートを知っているプログラマーは、仕事が早く終わり、余裕を持って趣味を楽しむことができます。
  • 🚀 バルクインサートは、複数のinsert文を1つのSQL文にまとめることで高速化されます。
  • ⏱️ 通常のinsert文を実行する場合に比べ、バルクインサートは約30倍高速です。
  • 🛑 ただし、バルクインサートには注意点があり、SQL文の最大文字数制限に気を配る必要があります。
  • 📝 データベースへの接続やレスポンスの手続きコストを減らすことで、バルクインサートは高速化されます。
  • 📚 MySQLでは、insert文よりもload data infileを使用することで、CSVファイルを高速でインポートできます。
  • 🔄 load data infileは、バルクインサートよりもさらに高速にデータをインポートできる可能性があります。
  • 👨‍💻 プログラミングの知識をブログに書き出すことで、学んだことをよりよく定着させることができます。
  • 📢 このチャンネルではプログラミング情報やハッキング対決など、さまざまな企画を配信しています。

Q & A

  • バルクインサートとはどのようなSQLの操作手法ですか?

    -バルクインサートは複数のinsert文を1つのSQL文にまとめることで、大量のデータを効率的に挿入するための手法です。

  • バルクインサートを知ることでどのような利点がありますか?

    -バルクインサートを知ることで、大量のデータを挿入する際に処理時間を劇的に短縮することができ、効率的な作業が可能になります。

  • バルクインサートがなぜ通常のinsert文よりも速い理由は何ですか?

    -バルクインサートは、複数のデータを一度に挿入するため、データベースとの接続やレスポンスの手続きを1回で済ませるため、通常のinsert文よりも速いです。

  • バルクインサートの実行にあたっての注意点は何ですか?

    -バルクインサートの注意点としては、SQL文の最大文字数が決まっており、それを超えるとエラーになることです。そのため、適切な区切りで分割して実行する必要があります。

  • バルクインサートの例として示されたSQL文の構造はどのようなものでしょうか?

    -バルクインサートの例では、通常のinsert文を複数用意し、それらをVALUESで区切って1つのSQL文にまとめています。

  • バルクインサートを使用する際にデータベースの制限を考慮する必要がある理由は何ですか?

    -データベースにはSQL文の最大文字数制限があり、バルクインサートで大量のデータを挿入する際にその制限を超過するとエラーが発生する可能性があるためです。

  • バルクインサートとload data infileのどちらがより高速なデータ挿入に適しているとされていますか?

    -load data infileはバルクインサートよりもさらに高速なデータ挿入に適しており、特にCSVファイルを直接データベースにインポートする際に20倍程度高速になることが挙げられます。

  • load data infileを使用する際にはどのような構文が使われますか?

    -load data infileを使用する際の構文は、「LOAD DATA INFILE 'ファイル名' INTO TABLE 'テーブル名';」となります。

  • バルクインサートの利点を実感するためにはどのような状況が考えられますか?

    -バルクインサートの利点を実感する状況としては、大量のデータをバッチ処理やデータ移行などにおいて挿入する際が考えられます。

  • バルクインサートを使用する際にデータを分割して実行することがなぜ重要なのか説明してください。

    -データを分割して実行することで、SQL文の最大文字数制限を超えずに安全に大量のデータを挿入できるため、エラーを回避し効率を保つことが重要です。

Outlines

00:00

😀バルクインサートの基本と効果

この段落では、バルクインサートの概念とその利便性が解説されています。バルクインサートは、SQLのinsert文を効率化し、大量のデータを挿入する際に劇的に高速化することができる技術です。例として、100万件のCSVデータをデータベースにインポートするタスクが与えられた場合、バルクインサートを知っているプログラマーは迅速に作業を完了させることができます。一方、知らないプログラマーは遅延し、残業を余儀なくされます。バルクインサートは、複数のinsert文を1つのSQL文にまとめることで実現し、その効果は通常のinsert文の30倍以上高速になることが示されています。

05:02

📚バルクインサートの仕組みと注意点

第二段落では、バルクインサートの仕組みについて詳しく説明されています。バルクインサートは、複数のデータを一度のクエリで挿入することでデータベースへのアクセス回数を減らし、処理速度を上げます。しかし、注意点としてSQL文の最大文字数が存在し、それを超えるとエラーが発生する可能性があることが指摘されています。そのため、大量のデータを扱う際には、データのチャンクに分割してバルクインサートを実行することが推奨されています。また、MySQL特有のload data infileという、CSVファイルを直接データベースにインポートできる機能も紹介されており、これはバルクインサートよりもさらに高速にデータをインポートできるという利点があります。

Mindmap

Keywords

💡バルクインサート

バルクインサートとは、複数のINSERT文を1つのSQL文にまとめて実行することで、大量のデータを高速にデータベースに挿入する手法です。この方法は、通常のINSERT文を複数実行する場合に比べて、劇的に処理速度が向上することが期待できます。ビデオでは、バルクインサートがどのようにしてSQLの挿入速度を劇的に速くできる方法であるかを解説しています。

💡SQL

SQLは、リレーショナルデータベース管理システム(RDBMS)に対する挿入、検索、更新、削除などの操作を行うためのプログラミング言語です。ビデオでは、SQLを用いてバルクインサートの方法やその利点を説明しています。

💡CSVデータ

CSVは、コンマ区切り値(Comma-Separated Values)の略称で、テキストファイルとしてデータを保存する形式です。ビデオでは、100万件のCSVデータをデータベースにインポートするシナリオを例に、バルクインサートの利便性を説明しています。

💡インサート速度

インサート速度とは、データをデータベースに挿入する際の処理速度を指します。ビデオでは、バルクインサートを用いることで、通常のINSERT文に比べて、インサート速度が大幅に向上することが示されています。

💡データベース

データベースとは、大量のデータを効率的に管理するためのシステムであり、様々な情報やデータを保存・検索・更新するために使用されます。ビデオの主題は、データベースへの大量のデータを高速に挿入するためのバルクインサート技術です。

💡バッチ処理

バッチ処理とは、一度に複数の処理をまとめて自動的に実行する仕組みです。ビデオでは、バルクインサートがバッチ処理で大量のINSERT文を効率的に実行できる方法であることが強調されています。

💡データ移行

データ移行とは、あるシステムのデータを別のシステムに転送するプロセスです。ビデオでは、バルクインサートがデータ移行の際にデータを高速に挿入できる利点を説明しています。

💡クエリの最大文字数

クエリの最大文字数は、SQL文の文字数の上限を指します。ビデオでは、バルクインサートで1つのSQL文にデータをまとめすぎると、この上限に達してエラーになる可能性があることを警告しています。

💡load data infile

load data infileは、MySQLにおいてCSVファイルを直接テーブルにインポートすることができるSQL文です。ビデオでは、バルクインサートよりもさらに高速なデータインポート方法として、このコマンドの利点を紹介しています。

💡ITエンジン

ITエンジンとは、学んだことをブログに書き記すことで、記憶の定着率を高めるための無料のブログサービスです。ビデオの締めくくりでは、ITエンジンを通じて学んだことを共有し、より多くの人々に情報を伝えるよう促されています。

Highlights

バルクインサートはSQLのinsert処理を劇的に速くすることができる方法です。

知っている人と知らない人の間には天国と地獄ほどの差があると説明されています。

バルクインサートを利用することで、大量のCSVデータを迅速にデータベースにインポートできます。

バルクインサートを知らないと残業が必要な場面が想定されます。

バルクインサートは複数のinsert文を1つのSQL文にまとめることで高速化されます。

バルクインサートの具体例として、3つのinsert文を1つのSQL文にまとめる方法が紹介されています。

バルクインサートは通常のinsert文の30倍程度速くなるとデータによると述べています。

バルクインサートの高速化の理由は、手続きのコストを削減できる点にあります。

バルクインサートにはクエリの最大文字数制限という注意点があります。

大量のデータを扱う際には、バルクインサートの区切り方にも注意が必要です。

MySQLではload data infileという機能でCSVファイルを高速でインポートできます。

load data infileはinsert文よりも20倍程度速いとMySQLの公式リファレンスに記載されています。

load data infileの構文例が紹介され、CSVファイルを直接テーブルに取り込む方法が説明されています。

ITエンジンという無料のブログサービスを紹介し、学んだことをブログに書くことで記憶の定着率が向上するという効果があるとアピールしています。

バルクインサートは大量のインサートを行う際に非常に有用であり、バッチ処理やデータ移行の際に注意が必要です。

バルクインサートの注意点として、クエリの最大文字数に気を配り、適切な区切りを設けることが重要です。

動画の最後に、評価やコメントを残すことで、視聴者の意見や感想を共有するよう促されています。

Transcripts

play00:00

瀬尾丸です今日はバルクインサートをつい

play00:02

て解説しますバルクインサートとは sql

play00:06

の insert 処理が劇的に速くなる

play00:08

方法ですこのバルクインサートを知ってる

play00:12

のと知らないのとでは天国と地獄ほどの差

play00:15

がありますこれを知っているとロレック来

play00:18

メリットがあるのかというとた例えば仕事

play00:20

の現場で100万件の csv データを

play00:23

渡されてこれきょう中にデイビーに入れて

play00:26

おいてとお願いされたとします

play00:28

こんなときバルクインサートを知っている

play00:30

ベテランプログラマーの a 君は切って

play00:33

気に早くインサートをすることができます

play00:35

のでサクッと仕事終わらせてあとは

play00:38

さっさと家に帰ってきも多いアニメを

play00:40

楽しむことでしょう

play00:42

一方バルクインサートを知らない駆け出し

play00:44

プログラマーの b 9はいつまでたって

play00:47

も insert 処理が終わらないので

play00:48

終電まで残業コースです

play00:51

このようにバルクインサートを知っている

play00:53

と冗談抜きで時間を短縮することができ

play00:56

ます

play00:57

今日はそんなバルクインサートについて

play00:59

解説しますので辛い残業をしないためにも

play01:01

最後まで動画をご覧下さい

play01:04

play01:07

それではバルクインサートについて解説を

play01:09

していきますその前にそもそもですね

play01:12

insert が遅い理由とは一体何なの

play01:15

でしょうか

play01:16

それはですね改良の insert 文が

play01:19

流れるケースです例えば

play01:21

バッチ処理で1000件とが1万件とか

play01:25

大量の insert 処理をおこ合う

play01:27

ような系図

play01:28

もしくはですねとあるシステムからとある

play01:31

システムデータを移行するようなケース

play01:33

こういった場合はですねデータベースへの

play01:36

大量のインサートが走りますので

play01:38

インサートが遅くなってしまいます

play01:41

そんな時にですねインサートを劇的に速く

play01:44

するのがバルクインサートですそれでは

play01:48

このバルクインサートとはいったいどう

play01:50

いうインサートなのかについて解説をして

play01:52

いきますバルクインサートとは複数の

play01:56

insert 文を一つにまとめて1本の

play02:00

insert 文として流す sql の

play02:02

ことをバルクインサートと言います

play02:05

では実際に見ていきましょう

play02:07

例えばこんな sql 文があったとし

play02:09

ます

play02:10

ここで3つの insert 文を走らせ

play02:13

ていますこれが通常の insert 文

play02:15

ですよねでバルクインサートだとどうなる

play02:18

のかというとこんな感じで1本の sql

play02:22

として産業のインサートを行っています

play02:25

こちらのインサート椅子テーブルでヴァ

play02:28

リューズのところに注目してください

play02:30

通常の insert 文ですとヴァ

play02:33

リューズ

play02:34

なんちゃらーと値を入れて最後にこのよう

play02:37

な感じで sql 文を終了させますよね

play02:40

バルクインサートの場合はヴァリューズで

play02:43

データを記述した後にカンマを書きます

play02:47

こんな感じで巻まで1個目のデータに米の

play02:51

データ3個目のデータというな感じで巻

play02:54

までを連結することによってですねこの3

play02:57

本の insert 文をたった1本の

play02:59

sq

play03:00

メールでインサートすることができます

play03:02

このように複数の insert 文を一

play03:05

つにまとめてインサートすることですね

play03:07

バルクインサートと言います

play03:09

[音楽]

play03:12

ではバルクインサートはどれだけ速いのか

play03:15

こちらにですね実際のデータがあります

play03:18

こちらのグラフはですねこちらのサイト

play03:20

から引用させていただきました

play03:22

で8ですね縦軸が時間ですで右側が本数

play03:28

ですね何軒の sql を走らせたかって

play03:31

いうことでえっとですね縦言えば1万件の

play03:34

insert 文を実行した時ですね

play03:37

1万件のインサートだと普通にエスケール

play03:39

を実行すると

play03:41

31秒かかります

play03:44

ですがバルクインサートの場合はですね

play03:46

こちらの赤いグラフなんですけども31秒

play03:49

に対してたったの1秒から2秒ぐらい

play03:52

たったの1秒から2秒ぐらいでバルク

play03:55

インサートの場合は印刷することができ

play03:57

ますですので30倍ぐらいですねに30倍

play04:02

くらいバルクインサートのが早いと

play04:04

いう結論になってますではバルク

play04:07

インサートはなぜ速いのかという解説をし

play04:10

ていきます

play04:11

例えばあなたがコンビニでお茶を3本買う

play04:14

としますコンビニでお茶を3本買うとき

play04:17

ですねあなたなら1本ずつお会計するのと

play04:21

ですね3本まとめてお会計するのとでは

play04:24

どちらが早いと思いますか

play04:27

当然3本まとめてお会計した方が早いです

play04:30

よね

play04:31

なぜかというとコンビニでお支払いする

play04:33

ときはですねお金を払ってそしてレシート

play04:37

を受け取ってというね手続きに時間が

play04:39

かかりますですのでこういった手続きは

play04:42

ですね3本まとめて行なっ頭が当然早い

play04:45

ですでこれはですね実はデータベースの

play04:48

場合も一緒です

play04:50

インサートを実行するということはですね

play04:53

どういうことかと言うとまずデータベース

play04:55

との接続を確立しますそしてですね

play04:58

insert 文を実行しますそして最後

play05:02

にインサート実行した結果をですね

play05:03

データベースからレスポンスとして

play05:05

受け取ります

play05:07

このような感じでデータベースにも手続き

play05:10

のコストがかかっています

play05:12

ですので1本のインサートを毎回を行う

play05:15

よりもですね手続きを3本まとめて1回で

play05:18

ズドンと行ったほうが早くなるということ

play05:21

になります

play05:21

[音楽]

play05:25

そんなバルクインサートですが注意点が

play05:27

あります

play05:28

それはですねクエリには実は最大文字数と

play05:32

いうものがありますこれがどういうことな

play05:34

のかというと1本の sql 文にはです

play05:37

ね最大何も時までという制限が決まってい

play05:40

ますこれが何も子なのかというのはですね

play05:43

お使いのデータベースのエッセ体にもよる

play05:45

ので一概には言えないんですけども

play05:48

何万も g とかが肥えてくるとですね

play05:51

だいたいその sql の最大文字数

play05:53

オーバーということでエラーになって

play05:55

しまいますですのでバルクインサートと

play05:58

いうのはですね何百本とか何千ポンドいう

play06:01

クエリをですね一つにまとめて実行すると

play06:04

いうものになりますので下手するとこの1

play06:06

クエリ当たりの最大文字数をオーバーして

play06:09

しまってですね

play06:10

実行したらエラーになるということがあり

play06:12

えなくはないです

play06:14

ですので例えばデータを専業ごとに区切っ

play06:17

てですね専業で一つのバルクインサートと

play06:20

して実行するというような感じでですね

play06:22

分割して実行するというのも重要になって

play06:25

きます

play06:27

[音楽]

play06:31

ここまでバルクインサートの解説をしてき

play06:33

ましたが実は insert 文よりも

play06:36

もっと早い load data in

play06:38

ファイルというものがあるのでそちらの

play06:39

解説をしますこちら mysql 限定に

play06:43

なるんですけども mysql ではです

play06:45

ね insert 文以前にですね csv

play06:48

ファイルをそのままが bot インポート

play06:50

数ることができる機能がありますこれが

play06:53

load data in ファイルと

play06:54

いうものです

play06:55

で mysql の公式リファレンスで

play06:57

言ってるんですけどもインサートをする

play07:00

よりも csv ファイルをそのままと

play07:02

離婚だった方がだいたい20倍ぐらい速く

play07:06

なるというふうに記載されています

play07:08

ですので場合によってはですねわざわざ

play07:11

バルクインサートしなくても csv

play07:13

ファイルをそのままテーブルに取り込ん

play07:15

じゃった方が早いというケースもあります

play07:16

ので一応覚えておきましょう

play07:19

でどういう構文で書くかというとですね

play07:21

load data in ファイル

play07:23

ファイル名委員というテーブルテーブル目

play07:27

こんな感じで実行するとですねこの csv

play07:29

ファイルがそのままドーンとテーブルの方

play07:32

にインサートすることができます

play07:34

はいそれでは10秒だけお知らせを挟んだ

play07:37

後に今回のまとめをしていきましょう

play07:39

こうチャンネルではプログラミング情報を

play07:41

配信しています

play07:42

他の動画では顔出しでハッキング対決を

play07:45

するなどアホな企画もやっているのでぜひ

play07:48

他の動画も覗いてみてくださいまた it

play07:50

エンジンという無料のブログサービスを

play07:52

やっています学んだことをブログに書くと

play07:55

記憶の定着率は20%から90%にまで

play07:58

アップしますのでぜひ概要欄のリンクから

play08:01

it エンジンでブログを書いてみて

play08:03

ください

play08:04

それでは今日のまとめです insert

play08:07

が遅いケースというのは大量のインサート

play08:10

を行うケースになりますバッチ処理とか

play08:12

データ移行の時は気を付けて下さいそんな

play08:15

ときに使うのがバルクインサートです

play08:16

バルクインサートとは複数の insert

play08:19

文を一つにまとめる insert 文の

play08:21

ことでしたわーるくインサートを行うと

play08:23

20倍前後ぐらい処理が速くなります

play08:26

注意点としてはクエリには最大文字数が

play08:28

ありますので例えば1000行ごとに1

play08:30

バルクにスルーなど区切りを意識し

play08:32

ましょう

play08:33

入ってことで今回はバルクインサートに

play08:35

ついて解説しましたがいかがだった

play08:37

でしょうか

play08:38

の動画を閉じる前に高評価のグッドボタン

play08:40

やコメントなどあなたの気持ちを残して

play08:42

いってくださいそれではまた別の動画でお

play08:45

待ちしています

play08:48

tee

play08:51

play08:51

jan

play08:53

[音楽]

play08:57

2

play09:00

ええええええ

play09:01

えっ

play09:02

[音楽]

play09:04

ええええええ

play09:05

dee

play09:06

Rate This

5.0 / 5 (0 votes)

الوسوم ذات الصلة
バルクインサートデータベースSQL高速化CSVインサート効率化プログラミングテクニックMySQLload data
هل تحتاج إلى تلخيص باللغة الإنجليزية؟