MySQL で数千万のテストデータを含むテストデータベースを作成する方法

MySQL で数千万のテストデータを含むテストデータベースを作成する方法

場合によっては、MySQL が公式に提供しているテスト ライブラリに基づいてテスト データを作成し、数十万、数百万、数千万のデータを挿入する必要があります。これは、いくつかの関数とストアド プロシージャを使用して行われます。

公式テストライブラリのアドレス: https://github.com/datacharmer/test_db

公式データベースをインポートし、いくつかの簡略化を行って、部門テーブル、従業員テーブル、雇用テーブルの 3 つのテーブルを残し、外部キーの関連付けを削除しました。テストデータのため、日付間の対応は正確ではありません。

必要な機能

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

RAND(): 0から1の間の乱数を生成します

FLOOR: 下向きの整数 (FLOOR(1.2)=1)

CEILINGは切り上げます(CEILING(1.2)=2)

部分文字列: 切片文字列

concat: 文字列の連結

CREATE DEFINER=`root`@`localhost` FUNCTION `rand_string`(n INT) RETURNS varchar(255) CHARSET latin1
始める
	chars_str varchar(100) を DEFAULT 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz' として宣言します。
  return_str varchar(255) DEFAULT '' を宣言します。
  i INT DEFAULT 0 を宣言します。
  i < n ながら
    return_str = concat(return_str、substring(chars_str、FLOOR(1 + RAND()*62)、1));を設定します。
    i = i +1 を設定します。
  終了しながら;
  戻り値 return_str;
終わり

すべてのカスタム関数を表示

機能ステータスを表示

テスト使用:

rand_string(5)を選択します。

ランダムな年、月、日の文字列を生成する

指定された期間内にランダムな日付を生成します

選択
	日付(
	from_unixtime( unix_timestamp( '2000-01-01' ) + floor( rand() * ( unix_timestamp( '2020-12-31' ) - unix_timestamp( '2000-01-01' ) + 1 ) ) ));

機能: 指定された期間内にランダムな日付を生成する

CREATE DEFINER=`root`@`localhost` FUNCTION `rand_date_string`(startDate varchar(255),endDate varchar(255)) 戻り値 varchar(255) CHARSET latin1
始める
  return_str varchar(255) DEFAULT '' を宣言します。
	
	 SET return_str =日付(
		from_unixtime( unix_timestamp( 開始日 ) 
				+ floor( rand() * ( unix_timestamp( 終了日 ) - unix_timestamp( 開始日 ) + 1 ) ) 
			)
	 );
  
  戻り値 return_str;
終わり

テスト使用:

rand_date_string('2000-01-01','2020-12-31') を選択します。
//結果 2001-09-10

ストアドプロシージャはデータを生成する

各部門に 100 万人の従業員が挿入されると、従業員テーブルには 900 万件のレコードが含まれることになります。

CREATE DEFINER=`root`@`localhost` PROCEDURE `data`()
始める
	
	i INT DEFAULT 1 を宣言します。
	j INT DEFAULT 0 を宣言します。
	id INT DEFAULT 0 を宣言します。
	10歳未満
			j < 1000000 の場合
				employees_m (従業員番号、生年月日、名、姓、性別、入社日) VALUES( に挿入します。
					id、rand_date_string('1970-01-01'、'1997-01-01')、rand_string(5)、rand_string(5)、'M'、NOW());
				
				dept_emp_m (emp_no,dept_no,from_date,to_date) の値に挿入します(
					 id、連結('d00'、i)、rand_date_string('1990-01-01'、'2020-12-31')、'2020-12-31');
					 
			j=j+1 を設定します。  
			id=id+1を設定します。  
			終了しながら;
	j = 0 に設定します。
	i=i+1 を設定します。   
	終了しながら;

終わり

900 万件のレコードを挿入するのにかかるおおよその時間: 4868 秒

上記のデータ挿入方法は非常に遅くなります。メモリテーブルにデータを挿入することができます。つまり、テーブルのストレージエンジンを MEMORY に変更します。この方法では、メモリを使用してデータを保存するため、INNODB エンジンを使用してテーブルに直接挿入するよりもはるかに高速になります。永続性がないだけですが、速度は非常に高速です。1,000 万のデータを挿入するのに約 1227.89 秒かかります。

付録

テーブルストレージエンジンを変更する

ALTER TABLE dept_emp_m ENGINE=MEMORY;

メモリテーブルのサイズを調整し、構成ファイルを変更します

[mysqld]
最大ヒープテーブルサイズ = 2048M
tmp_table_size = 2048M

以上がMySQLで数千万のテストデータを含むテストライブラリを作成する方法の詳細です。MySQLで数千万のテストデータの詳細については、123WORDPRESS.COMの他の関連記事に注目してください。

以下もご興味があるかもしれません:
  • MySQLループは数千万のデータを挿入する
  • 数千万のMySQLデータ量を素早くページ分割する方法
  • MySQL で大量のデータ (数千万) を素早く削除するためのいくつかの実用的なソリューションの詳細な説明
  • MySQL 数千万のビッグデータに対するSQLクエリ最適化の知識ポイントのまとめ
  • MySql クイック挿入数千万の大規模データの例
  • MySQLで数千万のテストデータを素早く作成する方法
  • 数百万件のレコードの分散ストレージを実現するための MySQL シャーディングのバッチ クエリ設計パターンの詳細な説明
  • MySQL 百万レベルのページング最適化 (MySQL 千万レベルの高速ページング)
  • 数千万のデータを含む MySQL テーブルを最適化するにはどうすればよいでしょうか?
  • Mysqlの制限を最適化し、100万から1000万までの高速ページングの複合インデックスを参照し、軽量フレームワークに適用します。

<<:  docker実行時に異なるポートを占有する2つのポートを起動する問題を解決する

>>:  シンプルな HTML ビデオ プレーヤーを実装する方法

推薦する

JavaScript配列の一般的なメソッドの詳細な説明

目次一般的な配列メソッドポップ()シフト解除()シフト()スライス()スプライス()配列から重複した...

Windows 8 での MySQL 5.6.15 のインストールと設定方法のグラフィック チュートリアル

MySQLは私がとても気に入っているデータベースです。今日はWindows 8システムでインストール...

Ubuntu システムにおける Mysql ERROR 1045 (28000): ユーザー root@localhost へのアクセスが拒否される問題の解決方法

最初の方法: skip-grant-tables: 非常に便利なmysql起動パラメータ非常に便利な...

Vue の共通 A​​PI と高度な API の概要

目次次のチェックミックスイン$強制更新設定、削除フィルター指令その他の単純な共通プロパティとメソッド...

Linux で MongoDB のリモート自動バックアップを実装する方法

序文古いプロジェクトを引き継ぐ苦労 - MongoDB クラスターの学習と構築に関する前回の記事を読...

Bootstrap Webページレイアウトグリッドの実装

目次1. Bootstrapグリッドシステムの仕組み1.1 12グリッドシステム1.2 Bootst...

デザイン理論: テキストの読みやすさと可読性

<br />少し前に、ビジネス上の必要性から、ラップトップに Souba をインストール...

Linux サーバー上の hosts ファイル構成の詳細な説明

Linux サーバーのホスト ファイルの構成hosts ファイルは、Linux システム内の IP ...

Linuxがすべてのコマンドをサポートしていない問題の解決策

Linux がすべてのコマンドをサポートしていない場合はどうすればいいですか?すべてのLinuxコマ...

Linuxフラッシュのインストール方法

Linuxにフラッシュをインストールする方法1. Flashの公式サイトにアクセスし、ダウンロードを...

React Native APPのアップデートに関する簡単な説明

目次アプリ更新プロセス大まかなフローチャートアプリ情報の更新1. まず取得する必要があるファイルアド...

Vue のデータ応答性に関する詳細な理解

目次1. ES 構文のゲッターとセッター2. ES構文でのdefineProperty 3. Vue...

IISとAPACHEはHTTPSへのHTTPリダイレクトを実装しています

7 のMicrosoft の公式 Web サイトから HTTP Rewrite モジュールをダウンロ...

js は複数の画像を zip にパッケージ化します

目次1. ファイルをインポートする2. HTMLページ3. メインコード4. 画像をbase64に変...