場合によっては、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の他の関連記事に注目してください。 以下もご興味があるかもしれません:
|
<<: docker実行時に異なるポートを占有する2つのポートを起動する問題を解決する
>>: シンプルな HTML ビデオ プレーヤーを実装する方法
<br />帯域幅の増加に伴い、Web ページ上のオブジェクトも増えているため、Web ...
目次1. 画像1. 鏡とは何ですか? 2. 画像の構成と目的(1) Dockerファイル(2)スクラ...
XHTML は CSS レイアウトの基礎です。jb51.net は常に XHTML 知識の習得を重視...
最近、インターネットのベテランと「広告」について議論したのですが、彼から非常に興味深い意見を聞きまし...
前回の記事「1行のCSSコードの魅力」では、たった1行のCSSコードで生成できる美しい(奇妙な感じと...
パッシブチェックパッシブ ヘルス チェックでは、NGINX と NGINX Plus はイベントの発...
さまざまな理由により、debパッケージ内のさまざまなファイルの内容を直接変更する必要がある場合があり...
目次スムーズなアニメーションの基準方法1: Chromeデベロッパーツールを使用する方法 2: フレ...
目次1. 最も単純なサーバー側の例2. バインドシステムコール2.1、inet_bind 2.2、i...
みなさんこんにちは。私は梁旭です。ご存知のとおり、Linux ではデバイス ファイルも含めすべてがフ...
目次実際の戦闘プロセスまずは主なコマンドと詳細を一つずつ説明しましょう起動が成功したかどうかを確認す...
目次概要1. アプリケーションレベルのミドルウェア2. 組み込みミドルウェア3. サードパーティミド...
この記事の目的は、これらの概念とその機能の関係を明らかにすることです。 Mysql がトランザクショ...
目次序文レンダリングの役割レンダリング機能の説明レンダリングとテンプレートの違いレンダリング例要約す...
マルチ選択は、すべてのオプションを一覧表示し、ユーザーが Ctrl/Shift キーを使用して複数選...