テスト用に大量のダミー データが必要だが、スクリプトの作成やレコードの手動挿入に何時間も費やしたくない、という状況に陥ったことはありませんか?あるいは、MySQL 8.0 の新機能を活用してデータベース タスクを効率化する方法に興味があるのではないでしょうか?さあ、ご褒美です!この投稿では、Common Table Expressions (CTE) を使用して、大量のダミー データを簡単に生成し、MySQL データベースに挿入する方法を説明します。
負荷テストやパフォーマンスのベンチマークのためにテーブルに 100 万個のハッシュ値を入力する必要があることを想像してください。悪夢のようですね?もうない! MySQL 8.0 での CTE の登場により、これを数秒で達成できるようになりました。これがどのように機能するのか、またこの強力な機能を使用してデータ生成のニーズを簡素化する方法を詳しく見てみましょう。
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 は、複雑なクエリを簡素化し、読みやすさを向上させるのに特に役立ちます。
SET SESSION cte_max_recursion_depth = 1000000;
cte_max_recursion_ Depth システム変数は、再帰の上限を設定します。デフォルトでは 1000 なので、さらに再帰するには調整する必要があります。ここでは 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;
このクエリを分析してみましょう:
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 ずつ増加します。CTE は 1 から 1,000,000 までの数値を再帰的に生成します。数値ごとに SHA-256 ハッシュを計算し、ハッシュ テーブルに挿入します。このアプローチは効率的であり、MySQL の再帰機能を活用して大量のデータをシームレスに処理します。
この機能の影響を理解するために、私は Gitpod Enterprise ワークスペースを使用し、強力で一時的な環境を活用して、セットアップやインストールの手間を省きました。セットアップの概要は次のとおりです:
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 サイトの他の関連記事を参照してください。