MySQL のストアド プロシージャを使用して 100 万件のレコードをすばやく生成する方法

MySQL のストアド プロシージャを使用して 100 万件のレコードをすばやく生成する方法

序文

テストを行う際、大量のデータによる負荷に耐えるプロジェクトの能力をテストするために、通常はテスト データを作成する必要があります。この方法は非常に便利です。

SQL スペース エラーが発生している可能性がありますが、これは自分で解決できます。ここでは、バッチ挿入が実行され、毎回 300,000 件のレコードが挿入されるため、同様のスペースの問題は発生しません。

まず、100万件のデータを挿入するテーブルを作成します

名前を設定します utf8mb4;
FOREIGN_KEY_CHECKS = 0 を設定します。
 
-- ----------------------------
-- sdb_b2c_orders のテーブル構造
-- ----------------------------
`sdb_b2c_orders` が存在する場合はテーブルを削除します。
テーブル `sdb_b2c_orders` を作成します (
  `order_id` varchar(50) 文字セット utf8 照合 utf8_general_ci NOT NULL デフォルト '0' コメント '注文番号',
  `seller_order_id` varchar(50) 文字セット utf8 照合 utf8_general_ci NOT NULL デフォルト '0' コメント '販売者注文番号',
  `total_amount` 小数点(20, 3) NOT NULL DEFAULT 0.000 COMMENT 'デフォルト通貨での商品の合計金額',
  `final_amount` 小数点(20, 3) NOT NULL DEFAULT 0.000 COMMENT '支払価格、税金などを含む注文通貨の合計金額',
  `pay_status` enum('0','1','2','3','4','5') CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT '0' COMMENT '支払いステータス 0-未払い 1-支払い済み 2-保証人に支払い済み 3-一部支払い 4-一部返金 5-全額返金',
  `ship_status` enum('0','1','2','3','4') 文字セット utf8 照合 utf8_general_ci NOT NULL デフォルト '0' コメント '配送状況',
  `is_delivery` enum('Y','N') CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT 'Y' COMMENT '発送する必要がありますか?',
  `createtime` int(10) UNSIGNED NULL DEFAULT NULL COMMENT '注文時間',
  `last_modified` int(10) UNSIGNED NULL DEFAULT NULL COMMENT '最終更新時刻',
  `ectools_payments` varchar(512) 文字セット utf8 COLLATE utf8_general_ci NULL デフォルト NULL,
  `payment` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '支払い方法',
  `shipping_id` mediumint(8) UNSIGNED NULL DEFAULT NULL COMMENT '配送方法',
  `shipping` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '配送方法',
  `member_id` mediumint(8) UNSIGNED NULL DEFAULT NULL COMMENT 'メンバーユーザー名',
  `platform_member_id` varchar(20) 文字セット utf8 照合 utf8_general_ci NULL デフォルト NULL コメント 'プラットフォームメンバーID',
  `store_id` mediumint(8) UNSIGNED NULL DEFAULT NULL COMMENT 'コレクションストアID',
  `confirm_status` enum('0','1','2','3') 文字セット utf8 照合 utf8_general_ci NULL デフォルト '0' コメント 'ストア注文ステータス',
  `confirm_time` int(10) UNSIGNED NULL DEFAULT NULL COMMENT '注文受付時間',
  `pickself_status` enum('0','1') 文字セット utf8 照合 utf8_general_ci NULL デフォルト NULL コメント 'セルフピックアップステータス',
  `pickself_time` int(10) NULL デフォルト NULL コメント 'ピックアップ時間',
  `pickself_id` mediumint(8) UNSIGNED NULL DEFAULT NULL COMMENT 'ピックアップストアID',
  `operator_id` mediumint(8) UNSIGNED NULL DEFAULT NULL COMMENT '受取人ユーザーID',
  `weixinscan_qrcode` varchar(200) 文字セット utf8 照合 utf8_general_ci NULL デフォルト NULL コメント 'WeChat 支払いコード',
  `alipay_qrcode` varchar(200) 文字セット utf8 照合 utf8_general_ci NULL デフォルト NULL コメント 'Alipay 支払いコード',
  `unionpay_qrcode` varchar(200) 文字セット utf8 照合 utf8_general_ci NULL デフォルト NULL コメント 'UnionPay 支払いコード',
  `qrcode` varchar(200) 文字セット utf8 COLLATE utf8_general_ci NULL デフォルト NULL コメント '検証コード',
  `promotion_type` enum('normal','prepare','recharge','cashier') CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT 'normal' COMMENT 'Sales type',
  `status` enum('active','dead','finish') 文字セット utf8 照合 utf8_general_ci NOT NULL デフォルト 'active' コメント '注文ステータス',
  `confirm` enum('Y','N') 文字セット utf8 COLLATE utf8_general_ci NOT NULL デフォルト 'N' コメント '確認ステータス',
  `ship_area` varchar(255) 文字セット utf8 COLLATE utf8_general_ci NULL デフォルト NULL コメント 'shipping area',
  `ship_name` varchar(50) 文字セット utf8 照合 utf8_general_ci NULL デフォルト NULL コメント 'Consignee',
  `weight` 小数点(20, 3) NULL デフォルト NULL コメント '注文合計重量',
  `tostr` longtext CHARACTER SET utf8 COLLATE utf8_general_ci NULL COMMENT '順序テキストの説明',
  `itemnum` mediumint(8) UNSIGNED NULL DEFAULT NULL COMMENT '注文サブ注文数量',
  `ip` varchar(15) 文字セット utf8 照合 utf8_general_ci NULL デフォルト NULL コメント 'IPアドレス',
  `ship_addr` テキスト 文字セット utf8 COLLATE utf8_general_ci NULL コメント '配送先住所',
  `ship_zip` varchar(20) 文字セット utf8 照合 utf8_general_ci NULL デフォルト NULL コメント '荷受人の郵便番号',
  `ship_tel` varchar(50) 文字セット utf8 照合 utf8_general_ci NULL デフォルト NULL コメント '配送先電話番号',
  `ship_email` varchar(200) 文字セット utf8 照合 utf8_general_ci NULL デフォルト NULL コメント '荷受人のメールアドレス',
  `ship_time` varchar(50) 文字セット utf8 照合 utf8_general_ci NULL デフォルト NULL コメント '配送時間',
  `ship_mobile` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '荷受人の携帯電話番号',
  `cost_item` 小数点(20, 3) NOT NULL デフォルト 0.000 コメント '注文アイテムの合計価格',
  `is_tax` enum('true','false') CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT 'false' COMMENT '請求書を発行しますか?',
  `tax_type` enum('false','personal','company') CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT 'false' COMMENT '請求書タイプ',
  `tax_content` varchar(255) 文字セット utf8 COLLATE utf8_general_ci NULL デフォルト NULL コメント '請求書の内容',
  `cost_tax` 小数点(20, 3) NOT NULL デフォルト 0.000 コメント '注文税率',
  `tax_company` varchar(255) 文字セット utf8 COLLATE utf8_general_ci NULL デフォルト NULL コメント '請求書ヘッダー',
  `is_protect` enum('true','false') CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT 'false' COMMENT '保険料はかかりますか?',
  `cost_protect` 小数点(20, 3) NOT NULL デフォルト 0.000 コメント '保険料',
  `cost_payment` 小数点(20, 3) NULL デフォルト NULL コメント '支払手数料',
  `currency` varchar(8) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '注文支払通貨',
  `cur_rate` 小数点(10, 4) NULL デフォルト 1.0000 コメント '注文支払通貨の為替レート',
  `score_u` 小数点(20, 3) NOT NULL DEFAULT 0.000 COMMENT '注文使用ポイント',
  `score_g` 小数点(20, 3) NOT NULL デフォルト 0.000 コメント 'ポイントの順序',
  `discount` 小数点(20, 3) NOT NULL デフォルト 0.000 コメント '注文割引',
  `pmt_goods` 小数点(20, 3) NULL デフォルト NULL コメント '製品プロモーション割引',
  `pmt_order` 10進数(20, 3) NULL デフォルト NULL コメント '注文プロモーション',
  `payed` 小数点(20, 3) NULL デフォルト 0.000 コメント '注文支払額',
  `memo` longtext CHARACTER SET utf8 COLLATE utf8_general_ci NULL COMMENT '注文メモ',
  `disabled` enum('true','false') 文字セット utf8 COLLATE utf8_general_ci NULL デフォルト 'false',
  `displayonsite` enum('true','false') 文字セット utf8 COLLATE utf8_general_ci NULL デフォルト 'true',
  `mark_type` varchar(2) 文字セット utf8 COLLATE utf8_general_ci NOT NULL デフォルト 'b1' コメント '注文メモアイコン',
  `mark_text` longtext 文字セット utf8 COLLATE utf8_general_ci NULL コメント '注文メモ',
  `cost_freight` 小数点(20, 3) NOT NULL デフォルト 0.000 コメント '配送料',
  `extend` varchar(255) 文字セット utf8 COLLATE utf8_general_ci NULL デフォルト 'false' コメント '拡張順序',
  `order_refer` varchar(20) 文字セット utf8 照合 utf8_general_ci NOT NULL デフォルト 'local' コメント '注文元',
  `addon` longtext CHARACTER SET utf8 COLLATE utf8_general_ci NULL COMMENT '注文追加情報(シリアル化)',
  `source` enum('pc','wap','weixin','cashier','paycode','eleme','meituan') 文字セット utf8 照合 utf8_general_ci NULL デフォルト 'pc' コメント 'プラットフォームソース',
  `source_name` varchar(30) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT 'ビジネス地区ライブラリ名',
  `merchant_bn` varchar(30) 文字セット utf8 照合 utf8_general_ci NULL デフォルト NULL コメント '販売者番号',
  BTREEを使用した一意のインデックス `idx_bn`(`order_id`, `merchant_bn`)、
  インデックス `ind_ship_status`(`ship_status`) BTREE 使用、
  インデックス `ind_pay_status`(`pay_status`) BTREE 使用、
  インデックス `ind_promotion_type`(`promotion_type`) BTREE 使用、
  INDEX `ind_status`(`status`) BTREEを使用、
  INDEX `ind_disabled`(`disabled`) BTREEを使用、
  インデックス `ind_last_modified`(`last_modified`) BTREE 使用、
  インデックス `ind_createtime`(`createtime`) BTREE 使用、
  インデックス `idx_order_refer`(`order_refer`) BTREE 使用、
  BTREE を使用したインデックス `idx_bn_aa`(`merchant_bn`)
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = 'Order table' ROW_FORMAT = Dynamic;
 
FOREIGN_KEY_CHECKS = 1 を設定します。

関数の作成

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

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

ランダムに数字を生成する

区切り文字 $$
関数 rand_num( ) を作成する 
戻り値 INT(5)  
始める   
 i INT DEFAULT 0 を宣言します。  
 i = FLOOR(100+RAND()*10) を設定します。  
i を返します。  
 終了 $$
 
 
#削除したい場合 #drop function rand_num;

ストアドプロシージャの作成

そしてテーブルにデータを挿入します

#ストアドプロシージャを実行して、sdb_b2c_order テーブルにランダムデータを追加します。DELIMITER $$
プロシージャ insert_sdb_b2c_orders(IN START INT(10),IN max_num INT(10)) を作成します。  
始める  
i INT DEFAULT 0 を宣言します。   
 自動コミットを 0 に設定します。    
 繰り返す  
 i = i + 1 を設定します。  
 sdb_b2c_orders (order_id、seller_order_id、total_amount、final_amount、source、source_name、merchant_bn) に値を挿入します。
 (rand_string(10) 、rand_string(10)、100、100、'要素'、'正方形'、(START+i));  
 i = max_numになるまで  
 繰り返し終了;  
 専念;  
 終了 $$;
 
 
#delete#DELIMITER;
# PROCEDURE insert_emp を削除します。

ストアドプロシージャを呼び出してデータを挿入する

 # 300,000 件のレコードを複数のバッチで挿入します CALL insert_sdb_b2c_orders(700003,300000);

結果

要約する

100 万データセットが完成しました。これで、MySQL のストアド プロシージャを使用して 100 万データセットをすばやく生成する方法に関するこの記事は終了です。MySQL のストアド プロシージャを使用して 100 万データセットを生成する方法の詳細については、123WORDPRESS.COM の以前の記事を検索するか、次の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • MySQL 空間データストレージと関数
  • MySQLデータベースでサポートされているストレージエンジンの比較
  • MySQLはストアドプロシージャを使用して数百万のデータを素早く追加します。サンプルコード
  • MySQL データベースでは、datetime、bigint、timestamp を使用して時間の選択を表します。時間を保存するのに最も効率的なのはどれですか?
  • MySQL シリーズ 7 MySQL ストレージ エンジン
  • MySQLシリーズ5つのビュー、ストアド関数、ストアドプロシージャ、トリガー
  • MYSQLストアドプロシージャコメントの詳細な説明

<<:  ウェブデザインの詳細分析に関する詳細な議論

>>:  VueでTypescriptの設定手順を使用する

推薦する

JavaScript の基本: ループと配列

目次ループ - for forループの基本的な使い方ループを終了するネストされたループ配列配列とは何...

MySQL マスタースレーブレプリケーションと読み取り書き込み分離の詳細な説明

記事マインドマップマスター/スレーブ レプリケーションと読み取り/書き込み分離を使用する理由は何です...

HTML メタタグの使用の概要 (推奨)

メタタグ機能METAタグは、HTMLタグのHEAD領域にある重要なタグです。文書の文字セット、使用言...

MySQL方言の簡単な紹介

データベースはさておき、人生における方言とは何でしょうか?方言とは、ある場所特有の言語です。他の場所...

Kali に docker と portainer をインストールする方法

dockerの登場により、多くのサービスが徐々にハードウェアアーキテクチャへの依存から脱却しました。...

CentOS7 での mysql 5.7.23 のバイナリ インストール

インターネット上のインストール情報は不均一で、落とし穴だらけです。インストールにはかなりの労力がかか...

iframe の src を about:blank に設定した後の詳細

iframe の src を 'about:blank' に設定した後、"...

MySQL マスタースレーブ構築(複数のマスターと 1 つのスレーブ)の実装アイデアと手順

背景:最近、同社のプロジェクトは同時実行のプレッシャーに耐えられないようなので、最適化が差し迫ってい...

DockerHubを自分で構築する方法

先ほど使用したDocker HubはDockerによって提供されています。独自のDockerを構築す...

表には表示したい境界コードが表示されます

テーブルの共通プロパティ基本的な属性は、width (幅)、height (高さ)、border (...

角度コンテンツ投影の詳細な説明

目次単一コンテンツ投影マルチコンテンツ投影単一条件のコンテンツ投影アプリ-人物-htmlアプリ担当者...

ウェブページの背景色を制御する CSS コード

誰もが自分の Web ページの背景にふさわしい画像を見つけることに悩むことが多いと思います。これは事...

win10 64 ビット システムに複数の JDK バージョンをインストールする際の切り替え問題と解決策の概要

コンピューターにmyeclipse2017とidea2017がインストールされているため、ideaが...

最小限のルートファイルシステムを構築するためにbusyboxを移植するための詳細な手順

Busybox: 小さなコマンドが詰まったスイスアーミーナイフ。ステップ1: ディレクトリ構造を作成...