MySQL に単純なダミーデータを大規模に注入する方法

PHPz
リリース: 2024-07-18 08:24:19
オリジナル
927 人が閲覧しました

How to inject simple dummy data at a large scale in MySQL

導入

テスト用に大量のダミー データが必要だが、スクリプトの作成やレコードの手動挿入に何時間も費やしたくない、という状況に陥ったことはありませんか?あるいは、MySQL 8.0 の新機能を活用してデータベース タスクを効率化する方法に興味があるのではないでしょうか?さあ、ご褒美です!この投稿では、Common Table Expressions (CTE) を使用して、大量のダミー データを簡単に生成し、MySQL データベースに挿入する方法を説明します。

負荷テストやパフォーマンスのベンチマークのためにテーブルに 100 万個のハッシュ値を入力する必要があることを想像してください。悪夢のようですね?もうない! MySQL 8.0 での CTE の登場により、これを数秒で達成できるようになりました。これがどのように機能するのか、またこの強力な機能を使用してデータ生成のニーズを簡素化する方法を詳しく見てみましょう。

TL; DR

MySQL 8.0 に追加された新機能である Common Table Expressions (CTE) を使用すると、大量の単純なダミー データを簡単に入力できます。たとえば、ハッシュ値を格納するハッシュと呼ばれるテーブルに 100 万個のダミー データを入力したい場合、次の手順でこれを実現できます。

テーブル定義

まず、テーブルを作成します。

CREATE TABLE hashes (
  id INT PRIMARY KEY AUTO_INCREMENT,
  hash CHAR(64)
);
ログイン後にコピー

クエリの実行

より高い再帰の深さを許可するようにセッション変数を設定します:

SET SESSION cte_max_recursion_depth = 1000000;
ログイン後にコピー
ログイン後にコピー

次に、CTE を実行して 100 万行を挿入します。

INSERT INTO hashes(hash)
WITH RECURSIVE cte (n) AS
(
  SELECT 1
  UNION ALL
  SELECT n + 1 FROM cte WHERE n < 1000000
)
SELECT SHA2(n, 256) FROM cte;
ログイン後にコピー
ログイン後にコピー

このメソッドは、再帰的な共通テーブル式を利用してダミー データを生成します。

CTE を理解する

共通テーブル式 (CTE) は、単一のステートメント内で複数回参照できる名前付きの一時的な結果セットです。 CTE は、複雑なクエリを簡素化し、読みやすさを向上させるのに特に役立ちます。

構文の内訳

再帰の深さの設定

SET SESSION cte_max_recursion_depth = 1000000;
ログイン後にコピー
ログイン後にコピー

cte_max_recursion_ Depth システム変数は、再帰の上限を設定します。デフォルトでは 1000 なので、さらに再帰するには調整する必要があります。ここでは 100 万に設定します。

CTE クエリ

INSERT INTO hashes(hash)
WITH RECURSIVE cte (n) AS
(
  SELECT 1
  UNION ALL
  SELECT n + 1 FROM cte WHERE n < 1000000
)
SELECT SHA2(n, 256) FROM cte;
ログイン後にコピー
ログイン後にコピー

このクエリを分析してみましょう:

  • WITH RECURSIVE cte (n): これにより CTE 定義が開始されます。 cte は一時結果セットの名前で、n は列です。

  • SELECT 1: これは CTE の非再帰部分であり、開始点 (初期値) として機能します。

  • UNION ALL SELECT n + 1 FROM cte WHERE n

    1000000: これは再帰部分であり、n の値が 1,000,000 に達するまで 1 ずつ増加します。
  • SELECT SHA2(n, 256) FROM cte: クエリのこの最後の部分は、各 n 値の SHA-256 ハッシュを選択し、挿入用のダミー データを生成します。

仕組み

CTE は 1 から 1,000,000 までの数値を再帰的に生成します。数値ごとに SHA-256 ハッシュを計算し、ハッシュ テーブルに挿入します。このアプローチは効率的であり、MySQL の再帰機能を活用して大量のデータをシームレスに処理します。

処理速度

検証環境

この機能の影響を理解するために、私は Gitpod Enterprise ワークスペースを使用し、強力で一時的な環境を活用して、セットアップやインストールの手間を省きました。セットアップの概要は次のとおりです:
  • マシン
  • : Gitpod Enterprise XXLarge ワークスペース
  • OS
  • : Ubuntu 22.04.4 LTS (Jammy Jellyfish)
  • コンテナ化
  • : Docker バージョン 26.0.1
  • MySQL バージョン
  • : 公式 MySQL 8.0 Docker イメージ

結果


100 万行の場合、クエリの実行時間は約 4.46 秒です。

mysql> INSERT INTO hashes(hash)
    -> WITH RECURSIVE cte (n) AS
    -> (
    ->   SELECT 1
    ->   UNION ALL
    ->   SELECT n + 1 FROM cte WHERE n < 1000000
    -> )
    -> SELECT SHA2(n, 256) FROM cte;
Query OK, 1000000 rows affected (4.43 sec)
Records: 1000000  Duplicates: 0  Warnings: 0
ログイン後にコピー

パフォーマンス指標
Number of Rows Execution Time
1,000 0.03 sec
10,000 0.07 sec
100,000 0.42 sec
1,000,000 4.43 sec
10,000,000 48.53 sec

結論

MySQL 8.0 での CTE の使用は、大量のダミー データを迅速に生成するための革新的な方法です。これは、負荷テストやパフォーマンスのベンチマークに特に便利です。わずか数行のコードで、テーブルに簡単にデータを入力し、プロジェクトの他の重要な部分に戻ることができます。

さまざまなデータ生成戦略と再帰の深さを試してみて、何が最適かを確認してください。セキュリティとログ分析に関するヒントや洞察をさらに知りたい場合は、Twitter @Siddhant_K_code をフォローして、このような最新かつ詳細な技術コンテンツの最新情報を入手してください。コーディングを楽しんでください!

以上がMySQL に単純なダミーデータを大規模に注入する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:dev.to
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート