「労働者が自分の仕事をうまくやりたいなら、まず自分の道具を研ぎ澄まさなければなりません。」 - 孔子、「論語。陸霊公」
表紙 > プログラミング > MySQL に単純なダミーデータを大規模に注入する方法

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

2024 年 8 月 1 日に公開
ブラウズ:820

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 



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

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 



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

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

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

  • UNION ALL SELECT n 1 FROM cte WHERE n

  • 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 (ジャミー ジェリーフィッシュ)
  • コンテナ化: 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  )
    -> SELECT SHA2(n, 256) FROM cte;
Query OK, 1000000 rows affected (4.43 sec)
Records: 1000000  Duplicates: 0  Warnings: 0

パフォーマンス指標

行の数 実行時間
1,000 0.03秒
10,000 0.07秒
100,000 0.42秒
1,000,000 4.43秒
10,000,000 48.53秒

結論

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

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

リリースステートメント この記事は次の場所に転載されています: https://dev.to/siddhantkcode/how-to-inject-simple-dummy-data-at-a-large-scale-in-mysql-eci?1 侵害がある場合は、 Study_golang@163 .comdelete に連絡してください
最新のチュートリアル もっと>

免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。

Copyright© 2022 湘ICP备2022001581号-3