数千万件のレコードをMySQLに素早く挿入する方法に関する実践的なチュートリアル

数千万件のレコードをMySQLに素早く挿入する方法に関する実践的なチュートリアル

1. データベースを作成する

2. テーブルを作成する

1. deptテーブルを作成する

テーブル「dept」を作成します(
 `id` int(11) NULLではない、
 `deptno` mediumint(9) デフォルト NULL,
 `dname` varchar(20) デフォルト NULL,
 `loc` varchar(13) デフォルト NULL,
 主キー (`id`)
)ENGINE=InnoDB デフォルト文字セット=utf8;

2. empテーブルを作成する

テーブル `emp` を作成します (
 `id` int(11) NULLではない、
 `empon` mediumint(9) デフォルト NULL コメント 'Number',
 `ename` varchar(20) デフォルト NULL,
 `job` varchar(9) デフォルト NULL,
 `mgr` mediumint(9) デフォルト NULL コメント '上位番号',
 `hirdate` datetime DEFAULT NULL COMMENT 'ジョブ開始時刻',
 `sal` 小数点(7,2) デフォルト NULL コメント '給与',
 `comm` 小数点(7,2) デフォルト NULL コメント '配当',
 `deptno` mediumint(9) デフォルト NULL コメント '部門番号',
 主キー (`id`)
)ENGINE=InnoDB デフォルト文字セット=utf8;

3. パラメータを設定する

'log_bin_trust_function_creators' のような変数を表示します。

デフォルトではオフです。1 に設定する必要があります。 mediumintフィールド作成関数がテーブルに設定されているため、エラーが発生する可能性があります

グローバル log_bin_trust_function_creators=1 を設定します。

4. 関数を作成する

1. ランダムな文字列を生成する

区切り文字 $
CREATE FUNCTION RAND_STR(n INT) は VARCHAR(255) を返します。
始める
 chars_str VARCHAR(100) をデフォルト 'abcdefghijklmnopqrstuvwsyzABCDEFGHIJKLMNOPQRSTUVWXYZ' として宣言します。 
	 return_str VARCHAR(255) DEFAULT '' を宣言します。
 i INT DEFAULT 0 を宣言します。
	 しながら、 
	 return_str = COUCAT(return_str、SUBSTRING(chars_str、FLOOR(1+RAND()*52)、1)); を設定します。
	 i= i+1 を設定します。
 終了しながら;
	 戻り値 return_str;
終了 $

2. 部門番号をランダムに生成する

区切り文字 $
CREATE FUNCTION RAND_num() は INT(5) を返します。
始める
 i INT DEFAULT 0 を宣言します。 
	 i = FLOOR(100+RAND()*10)を設定します。
	 i を返します。
終了 $

5. ストアドプロシージャを作成する

1. emp テーブル ストアド プロシージャ

区切り文字 $
CREATE PROCEDURE insert_emp(IN START INT(10),IN max_num INT(10))
始める
  i INT DEFAULT 0 を宣言します。
		自動コミットを 0 に設定します。
		繰り返し #繰り返し SET i = i + 1;
		emp(empon,ename,job,mgr,hiredate,sal,comm,depton) に値 ((START+i),RAND_STR(6),'SALESMAN',0001,CURDATE(),2000,400,RAND_num()); を挿入します。
	 i = max_numになるまで
 繰り返し終了;
	 専念;
終了 $

2.deptテーブルのストアドプロシージャ

区切り文字 $
CREATE PROCEDURE insert_dept(IN START INT(10), IN max_num INT(10))
始める
  i INT DEFAULT 0 を宣言します。
		自動コミットを 0 に設定します。
		繰り返し #繰り返し SET i = i + 1;
		dept(deptno,dname,loc) に値 ((START+i),RAND_STR(10),RAND_STR(8)) を挿入します。
	 i = max_numになるまで
 繰り返し終了;
	 専念;
終了 $

6. 実行

1. まず10のルールを実行する

このエラーは小さな落とし穴です。見つけましたか? 前にも残しました。プロンプトに従って確認してください。

実行に成功しました!

2. データを表示する

ハイライトはここ! 賭けてみて、失敗するかどうか見てみましょう。

3. 100万回の挿入を実行する

insert_dept(10001,1000000)を呼び出します。

100 万のデータを実行するのに 400 秒かかり、1 秒あたり 2500 です。私の設定が悪すぎます。前回のテストは 1 秒あたり 10,000 で、最高は 1 回の実行あたり 500,000 でした。

オークスリーピング

要約する

これで、Mysql に数千万のデータをすばやく挿入する方法に関するこの記事は終了です。Mysql に数千万のデータを挿入する方法の詳細については、123WORDPRESS.COM の以前の記事を検索するか、次の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • MySQL に大量のデータを挿入する 4 つの方法の例
  • MySQLに何百万ものテストデータを素早く挿入する方法
  • MySql で 1 つのテーブルから別のテーブルにデータを挿入するための実装コード
  • 1 つの MySQL ステートメントで複数のレコードを挿入する
  • データがmysqlに存在しない場合は新しいデータを挿入し、そうでない場合は実装メソッドを更新します。
  • MySQL にテーブルデータを挿入するときに中国語の文字化けが発生する問題を解決する方法
  • MySQLデータベースの挿入速度と読み取り速度の調整記録
  • MYSQL バッチ挿入データ実装コード
  • MySQLのヒント: データの挿入(レコードの追加)の速度を上げる
  • MySQLは一度に複数のデータをテーブルに挿入します

<<:  HTML iframe 使用状況の概要の収集

>>:  純粋な CSS3 マインドマップ スタイルの例

推薦する

CSS3 でテキストの点滅効果を実現する 3 つの方法 サンプルコード

1. 透明度を変更してテキストを徐々に点滅させると、次のような効果が得られます。 <!DOCT...

純粋な CSS を使用してユーザーが Web ページのコンテンツをコピーするのを防ぐ方法

序文私自身の個人ブログを入力しているときに、ブログの詳細ページでさまざまなコンテンツをコピーするさま...

MySQL 文字セットの文字化けとその解決方法

序文文字セットは、一連のシンボルとエンコード規則です。Oracle データベースでも MySQL デ...

Linux での UDP について学ぶ

目次1. UDPとLinuxの基礎の紹介2. 各機能の使い方1. ソケット機能の使用2. バインド機...

Vue プラグイン エラー: このページで Vue.js が検出されました。問題は解決しました

Vue プラグインがエラーを報告しました: このページで Vue.js が検出されましたVueプラグ...

CSS3 のエラスティック レイアウトでの em の使用の概要: 1em は何ピクセルですか?

私は長い間 CSS を使用してきましたが、Web 要素の関連属性を設定するために常に「px」を使用し...

MySQLがOracleのnvlと同様の機能を持つことができるかどうかについての簡単な議論

isnullの代わりにifnullを使用するisnull は、null かどうかを判断するために使用...

Dockerでmongodbデータベースを使用するための実装コード

mongoイメージを取得する sudo docker pull mongo mongodbサービスを...

Mysql ALTER TABLE はフィールドを追加するときにテーブルをロックしますか?

目次MySQL 5.6以前MySQL 5.6以降要約する知らせMySQL 5.6以前更新手順元のテー...

リソースアップロード機能を実現するための SpringBoot+nginx の詳細な例

最近、画像、ビデオ、CSS/JS などの静的リソースを配置するために nginx を使用する方法を学...

MySQL データベース内の同じテーブルを同時にクエリして更新する方法

通常のプロジェクトでは、1 回の入札で同時にデータを更新および照会する必要があるという問題によく遭遇...

スマートCSSを使用して、ユーザーのスクロール位置に基づいてスタイルを適用します。

現在のスクロール オフセットを html 要素の属性に追加することで、現在のスクロール位置に基づいて...

Ubuntuのpython3でvenvを使用して仮想環境を作成する

1. 仮想環境はプロジェクトに従い、単一のプロジェクト用の仮想環境を作成します(Python 3.4...

IP アドレス経由で MySql にアクセスする方法

1. mysqlにログインします。 mysql -u ルート -h 127.0.0.1 -p 2. ...

MySQLの認証コマンドgrantの使い方

この記事の例は MySQL 5.0 以降で実行されます。ユーザー権限を付与するための MySQL コ...