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の設定手順を使用する

推薦する

Windows Server 2012 リモート デスクトップ ライセンス サーバーがライセンスを提供できず、リモート セッションが切断される

本日、会社の内部サーバーにログインしたところ、リモートアクセスができませんでした。エラー メッセージ...

この記事では、イベント委任を使用してJavaScriptメッセージボード機能を実装する方法について説明します。

イベント委任を使用してメッセージ ボード機能を実装します。 <!DOCTYPE html>...

Jenkins でユーザー ロールの権限を設定する方法

Jenkinsのユーザーロール権限の設定には、ロール戦略プラグインのインストールが必要です。 1.ロ...

初心者がHTMLタグを学ぶ(1)

初心者は、いくつかの HTML タグを理解することで HTML を学習できます。この入門書は、初心者...

Windows Server 2016 リモート デスクトップ サービスの構成とライセンスのアクティブ化 (2 ユーザー)

Server 2016 のリモート デスクトップ接続のデフォルト数は 2 ユーザーです。2 人以上...

CentOS7におけるKVM仮想化の基本管理の詳しい説明

1. kvm仮想化をインストールする : : : : : : : : : : : : : : : :...

MySQL バッチ SQL 挿入パフォーマンス最適化の詳細な説明

大量のデータを扱うシステムの中には、クエリ効率の低さやデータの保存時間の長さといったデータベースの問...

航空機戦争ゲームを実装するためのJavaScript

この記事では、キャンバスとjsを使用して簡単な飛行機戦争を実装する方法を参考までに紹介します。具体的...

CentOS での Docker の詳細なインストール チュートリアル

DockerにはCEとEEがあり、CE版はコミュニティ版(無料)、EE版はセキュリティを重視したエン...

無視されたDOCTYPE記述の分析

doctype もその 1 つです。 <!DOCTYPE HTML PUBLIC "...

GobangゲームのWebバージョンを実装するためのJavaScript

この記事では、GobangゲームのWebバージョンを実装するためのJavaScriptの具体的なコー...

ウェブサイトの画像にグレー効果を加える3つの方法

私はグレースケールの画像の方が芸術的に見えると思うので、いつもグレースケールの画像を好んで使っていま...

MySQLデータ行と行オーバーフローのメカニズムの詳細な説明

1. 行の形式は何ですか? MySQL の行形式の設定は次のように表示されます。 実際、MySQL ...

vue-router 4 の使用例の詳しい説明

目次1. インスタンスをインストールして作成する2. vue-router4の新機能2.1 動的ルー...

MySQL binlog の解析

目次1. binlogの紹介2. Binlog関連のパラメータ3. バイナリログの内容を分析するIV...