数千万件のレコードを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 マインドマップ スタイルの例

推薦する

Amoeba を使用して MySQL データベースの読み取り/書き込み分離を実装する方法の詳細な説明

MySQL には読み取りと書き込みを分離するアーキテクチャが多数あります。Baidu のそれらのほと...

jsはCanvasを使用して複数の画像を1つの実装コードにマージします

解決 関数 mergeImgs(リスト) { const imgDom = document.cre...

border-radiusは要素に丸い境界線を追加する方法です

border-radius:10px; /* すべての角は半径 10px で丸められます*/ bor...

検索データ表示を実装するJavaScript

この記事ではJavaScript検索のデータ表示コードを参考までに共有します。具体的な内容は以下のと...

JSX を使用してマークアップ コンポーネント スタイルの開発を作成する例 (フロントエンドのコンポーネント化)

目次JSX環境の構築NPMを初期化するwebpackをインストールするBabelをインストールするw...

Alibaba Cloud ECSインスタンスのユーザールートパスワードとリモート接続方法を設定する方法

Alibaba Cloud サーバーを購入した後、新しいインスタンスが正常に動作できるようにするには...

Web データ ストレージ: Cookie、UserData、SessionStorage、WebSqlDatabase

クッキーこれはクライアント ブラウザの状態を保存するための標準的な方法です。Cookie はブラウザ...

Vueはシンプルなスライダー検証を実装する

この記事の例では、Vueスライダー検証の実装を共有しています。コードは次のとおりです。 <テン...

Keepalived は Nginx の負荷分散と高可用性のサンプル コードを実装します

第1章: keepalivedの紹介VRRP プロトコルの目的は、静的ルーティングの単一点障害問題を...

ズームインとズームアウトの閉じるボタンを実現する CSS (サンプル コード)

この効果はブラウザ ページで最もよく見られます。まずは効果の画像をご覧ください。 上の図に示すように...

フィルターと固定間の競合の原因と解決策の詳細な説明

問題の説明body内でfilter属性を使用すると、 fixed要素の位置が不正確になります。つまり...

IE8はマルチ互換モードを使用してWebページを正常に表示します

IE8には複数の互換モードがあります。 IE プラットフォームの設計者である Chris Wilso...

react-navigation6.xルーティングライブラリの基本的な使い方の詳しい説明

目次react-nativeプロジェクトの初期化react-nativeプロジェクトをインストールす...

Vue要素と多言語切り替えの詳細な説明

目次序文複数の言語を切り替えるにはどうすればいいですか? 1. vue-i18nパッケージをインスト...

Linux は suid vim.basic ファイルを使用して権限昇格を実現します。

カリで再現まず、必要なvim.basicファイルにsuid権限を設定します。 chmod u+s /...