質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

Q&A

解決済

6回答

4521閲覧

大量のINSERT文に関して

whxtna

総合スコア57

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

0グッド

0クリップ

投稿2018/06/06 01:40

サービス稼働中の下記テーブルに5万件ほどのデータを本番環境にて直接INSERT文でデータを挿入するにあたって、
何か最適な方法はありますでしょうか?
現状は下記SQL文を5万件準備し実行予定です。
INSERT INTO user_info_tbl ~ VALUES ~

CREATE TABLE user_info_tbl (
user_id INT(10) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT 'ユーザーID',
user_type INT(2) NOT NULL COMMENT 'ユーザータイプ',
user_name VARCHAR(32) NOT NULL COMMENT 'ユーザー名',
create_date DATETIME NOT NULL COMMENT '作成日',
update_date DATETIME NOT NULL COMMENT '更新日',
PRIMARY KEY (user_id),
)

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

m.ts10806

2018/06/06 02:07

「挿入する」こと自体なのか「SQLを作る」なのかで回答の方向性が違ってきます(既に回答に出てきていますが)
guest

回答6

0

ベストアンサー

MySQLの場合、INSERT INTOを5万個並べるより、INSERT INTO user_info_tbl (列リスト) VALUES (値1), (値2), ...のように一括でINSERTしたほうが、ずっと高速に処理できます(Qiita)。

投稿2018/06/06 01:44

maisumakun

総合スコア145121

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

whxtna

2018/06/11 00:52

バルクインサートにて実施いたしました。 ご回答ありがとうございます。
guest

0

5万件が「エラーなしに」入ることを保証できているならバルクインサートでも何でもありですが、
そうとは限らないのだとしたら、安全のために1000件単位程度でトランザクションかけながらやりますね。

*nix 系ならシェルスクリプトをかませて。

投稿2018/06/06 03:12

tacsheaven

総合スコア13703

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

whxtna

2018/06/11 00:54

バルクインサートにて実施いたしました。 ご回答ありがとうございます。
guest

0

INSERTじゃないといけないんですか?
MySQLならLOAD DATA (LOCAL) IN FILEでcsvやらtsvファイルを食わせるのが最速だと思います。
autoincrementなカラムはcsvなどに入れておかなければ、自動で入るハズです。

投稿2018/06/06 01:50

sh-ogawa

総合スコア43

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

whxtna

2018/06/11 00:53

バルクインサートにて実施いたしました。 LOAD DATAでの方法の今後参考にさせていただきます。 ご回答ありがとうございます。
guest

0

現状は下記SQL文を5万件準備し実行予定です。
INSERT INTO user_info_tbl ~ VALUES ~

これ、加工してるんなら、**LOAD DATA IN FILE**を使用して、ファイルを直接取り込んだほうが加工の手間も減るし、insert(バルクも含め)より高速です。、

投稿2018/06/06 03:15

sazi

総合スコア25138

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

whxtna

2018/06/11 00:54

バルクインサートにて実施いたしました。 LOAD DATAでの方法の今後参考にさせていただきます。 ご回答ありがとうございます。
guest

0

わたしもやるならバルクインサート一択ですね

insert into テーブル values(...),(...),(...),(...),...;

ただし運用が許せば一気に流し込まず、1,000件とか10,000件とかにわけて
処理をするほうが確実です

投稿2018/06/06 02:41

yambejp

総合スコア114583

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

whxtna

2018/06/11 00:52

バルクインサートにて実施いたしました。 LOAD DATAでの方法の今後参考にさせていただきます。 ご回答ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問