」工欲善其事,必先利其器。「—孔子《論語.錄靈公》
首頁 > 程式設計 > 如何在MySQL中大規模注入簡單的虛擬數據

如何在MySQL中大規模注入簡單的虛擬數據

發佈於2024-08-01
瀏覽:883

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

介紹

是否曾經發現自己處於需要大量虛擬資料進行測試,但又不想花費數小時編寫腳本或手動插入記錄的情況?或者您可能對如何利用 MySQL 8.0 中的新功能來簡化資料庫任務感到好奇?好吧,你可要好好享受一下了!在這篇文章中,我們將探討如何使用通用表格運算式 (CTE) 輕鬆產生大量虛擬資料並將其插入 MySQL 資料庫中。

想像一下需要在表中填入一百萬個雜湊值以進行負載測試或效能基準測試。聽起來像是場惡夢,對吧?不再!隨著 MySQL 8.0 中 CTE 的出現,您可以在幾秒鐘內實現這一目標。讓我們深入了解它的工作原理以及如何使用這個強大的功能來簡化您的資料生成需求。

TL; DR

通用表格表達式(CTE)是MySQL 8.0中新增的功能,可以用來輕鬆輸入大量簡單的虛擬資料。例如,如果您想要將 100 萬個虛擬資料輸入到一個儲存雜湊值的名為 hashes 的表中,則可以透過以下步驟實作:

表定義

先建立表格:

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 工作區
  • 作業系統: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  )
    -> 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 .com刪除
最新教學 更多>
  • 如何為 DOM 元素產生精確的 CSS 路徑?
    如何為 DOM 元素產生精確的 CSS 路徑?
    以增強的精度從 DOM 元素檢索 CSS 路徑提供的函數嘗試為給定 DOM 元素生成 CSS 路徑。然而,它的輸出缺乏特異性,無法捕捉元素在其兄弟元素中的位置。為了解決這個問題,我們需要一個更複雜的方法。 改進的 CSS 路徑函數下面介紹的增強函數解決了原來的限制:var cssPath = fun...
    程式設計 發佈於2024-11-03
  • 如何將單一 Python 字典寫入具有精確標題和值行的 CSV 檔案?
    如何將單一 Python 字典寫入具有精確標題和值行的 CSV 檔案?
    探索將Python 字典寫入CSV 文件的細微差別您對將Python 字典無縫寫入CSV 文件的追求給您帶來了意想不到的挑戰。雖然您設想在作為標題的字典鍵和作為第二行的值之間進行清晰的劃分,但您目前的方法似乎還不夠。讓我們深入細節,解鎖解決方案。 問題在於方法的選擇。 DictWriter.writ...
    程式設計 發佈於2024-11-03
  • 如何處理 Go 中延遲函數的錯誤回傳值?
    如何處理 Go 中延遲函數的錯誤回傳值?
    處理Go 中返回值錯誤的延遲函數當返回變數的函數在沒有延遲的情況下被延遲時,gometalinter 和errcheck 正確地發出警告檢查其回傳的錯誤。這可能會導致未處理的錯誤和潛在的運行時問題。 處理這種情況的習慣用法不是推遲函數本身,而是將其包裝在另一個檢查返回值的函數中。這是一個例子:def...
    程式設計 發佈於2024-11-03
  • 為什麼程式設計師不能總是記住程式碼:背後的科學
    為什麼程式設計師不能總是記住程式碼:背後的科學
    如果您曾經想知道為什麼程式設計師很難回憶起他們編寫的確切程式碼,那麼您並不孤單。儘管花了數小時編碼,許多開發人員經常忘記細節。這並不是因為缺乏知識或經驗,而是因為工作本身的本質。讓我們來探究一下這種現象背後的原因。 程式設計的本質 透過記憶解決問題 這比僅僅記憶語法...
    程式設計 發佈於2024-11-03
  • 你並不孤單:在社群的支持下掌握 Python
    你並不孤單:在社群的支持下掌握 Python
    加入 Python 社群可取得:社群論壇:向經驗豐富的開發者取得支援和建議(如 Stack Overflow)。 Discord 伺服器:即時聊天室,提供即時支援與指導(如 Python Discord)。線上課程與研討會:來自專家的指導,涵蓋各種主題(如 Udemy 上的 Python NumPy...
    程式設計 發佈於2024-11-03
  • 學習夥伴
    學習夥伴
    聊天機器人介面,允許使用者輸入訊息並接收來自 GPT-3.5 語言模型的對話回應。 特徵 用於處理 HTTP 請求的基於 Flask 的 Web 伺服器。 呈現用作使用者介面的基本 HTML 模板 (chat.html)。 透過 POST 請求接受使用者輸入並將其傳送到 OpenAI 的 GP...
    程式設計 發佈於2024-11-03
  • 前端開發 + 資料結構與演算法:DSA 如何為您的 React 應用程式提供動力 ⚡
    前端開發 + 資料結構與演算法:DSA 如何為您的 React 應用程式提供動力 ⚡
    专注于前端的面试通常根本不关心 DSA。 对于我们这些记得在学校/大学学习过 DSA 的人来说,所有的例子都感觉纯粹是算法(有充分的理由),但几乎没有任何例子或指导来说明我们每天使用的产品如何利用这个概念。 “我需要这个吗?” 你已经问过很多次这个问题了,不是吗? ? 以下是您今天可以在 React...
    程式設計 發佈於2024-11-03
  • 為什麼表格行上的框陰影在不同瀏覽器中表現不同?
    為什麼表格行上的框陰影在不同瀏覽器中表現不同?
    跨瀏覽器表行上的框陰影外觀不一致應用於表行() 的CSS 框陰影可能表現出不一致的行為跨各種瀏覽器。儘管 CSS 相同,但某些瀏覽器可能會如預期顯示陰影,而其他瀏覽器則可能不會。 要解決此問題,建議將 Transform 屬性與 box-shadow 屬性結合使用。將scale(1,1)加入tran...
    程式設計 發佈於2024-11-03
  • 探索 PHP 中的並發性和並行性:實作教學和技巧
    探索 PHP 中的並發性和並行性:實作教學和技巧
    理解並發性和平行性對於編寫高效的 PHP 應用程式至關重要,特別是在處理需要同時處理的多個任務或操作時。這是理解和實作 PHP 並發性和平行性的逐步指南,包含實作範例和說明。 1.併發與並行 並發:指系統透過交錯執行同時處理多個任務的能力。這並不一定意味著任務是同時執行的,只是對它...
    程式設計 發佈於2024-11-03
  • ReactJs 與 Angular
    ReactJs 與 Angular
    React 和 Angular 是用于构建 Web 应用程序的两个最流行的框架/库,但它们在关键方面有所不同。以下是 React 和 Angular 之间主要区别的细分: 1. 类型:库与框架 React:一个用于构建用户界面的库,主要关注视图层。它允许开发人员将其与其他库集成以处理...
    程式設計 發佈於2024-11-03
  • 如何使用變數中儲存的類別名稱動態實例化 JavaScript 物件?
    如何使用變數中儲存的類別名稱動態實例化 JavaScript 物件?
    使用動態類別名稱實例化 JavaScript 物件假設您需要使用儲存在變數中的類別名稱實例化 JavaScript 物件。以下是一個說明性範例:// Define the class MyClass = Class.extend({}); // Store the class name in a s...
    程式設計 發佈於2024-11-03
  • Spring Boot 中的 OAuth 驗證:Google 與 GitHub 登入整合指南
    Spring Boot 中的 OAuth 驗證:Google 與 GitHub 登入整合指南
    使用 OAuth 2.0 增强安全性:在 Spring Boot 中实现社交登录 在现代 Web 开发的世界中,保护您的应用程序并使用户的身份验证尽可能顺利是首要任务。这就是 OAuth 2.0 的用武之地——它是一个强大的工具,不仅可以帮助保护您的 API,还可以让用户使用现有帐户从 Google...
    程式設計 發佈於2024-11-03
  • 熱點圖-巴西 vs 義大利世界盃決賽)
    熱點圖-巴西 vs 義大利世界盃決賽)
    在這篇文章中,我開始嘗試使用 Python 和 Seaborn 和 Matplotlib 創建 1970 年世界盃決賽中巴西運動的熱圖 。這個想法是根據那場比賽的比賽風格特徵來代表巴西隊在場上佔據的空間。 1. 繪製場地 場地設計為比例座標(130x90),包括邊線、球門區和中心圈...
    程式設計 發佈於2024-11-03
  • 如何在 C++ 中連接字串文字和字元文字?
    如何在 C++ 中連接字串文字和字元文字?
    C 中的字串文字和字元文字 嘗試在 C 中連接字串文字與字元文字時,可能會出現意外行為。例如:string str = "ab" 'c'; cout << str << endl;此程式碼會產生不可預測的輸出,因為沒有定義「」運算子來組合字串文字和字元...
    程式設計 發佈於2024-11-03
  • 透過「Go 練習挑戰」課程釋放您的演算法潛力
    透過「Go 練習挑戰」課程釋放您的演算法潛力
    透過 LabEx 的「Go Practice Challenges」課程踏上令人興奮的旅程,提升您的程式設計技能。這門綜合課程旨在幫助您掌握解決問題的藝術和提高程式設計效率,為您提供應對各種演算法挑戰的工具和技術。 深入演算法世界 「圍棋實踐挑戰」課程提供了一系列實際挑戰,將突破您...
    程式設計 發佈於2024-11-03

免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。

Copyright© 2022 湘ICP备2022001581号-3