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

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

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

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刪除
最新教學 更多>
  • 如何解決AppEngine中“無法猜測文件類型,使用application/octet-stream...”錯誤?
    如何解決AppEngine中“無法猜測文件類型,使用application/octet-stream...”錯誤?
    appEngine靜態文件mime type override ,靜態文件處理程序有時可以覆蓋正確的mime類型,在錯誤消息中導致錯誤消息:“無法猜測mimeType for for file for file for [File]。 application/application/octet...
    程式設計 發佈於2025-07-05
  • 大批
    大批
    [2 數組是對象,因此它們在JS中也具有方法。 切片(開始):在新數組中提取部分數組,而無需突變原始數組。 令ARR = ['a','b','c','d','e']; // USECASE:提取直到索引作...
    程式設計 發佈於2025-07-05
  • 如何克服PHP的功能重新定義限制?
    如何克服PHP的功能重新定義限制?
    克服PHP的函數重新定義限制在PHP中,多次定義一個相同名稱的函數是一個no-no。嘗試這樣做,如提供的代碼段所示,將導致可怕的“不能重新列出”錯誤。 但是,PHP工具腰帶中有一個隱藏的寶石:runkit擴展。它使您能夠靈活地重新定義函數。 runkit_function_renction_...
    程式設計 發佈於2025-07-05
  • 解決Spring Security 4.1及以上版本CORS問題指南
    解決Spring Security 4.1及以上版本CORS問題指南
    彈簧安全性cors filter:故障排除常見問題 在將Spring Security集成到現有項目中時,您可能會遇到與CORS相關的錯誤,如果像“訪問Control-allo-allow-Origin”之類的標頭,則無法設置在響應中。為了解決此問題,您可以實現自定義過濾器,例如代碼段中的MyFi...
    程式設計 發佈於2025-07-05
  • 如何使用node-mysql在單個查詢中執行多個SQL語句?
    如何使用node-mysql在單個查詢中執行多個SQL語句?
    Multi-Statement Query Support in Node-MySQLIn Node.js, the question arises when executing multiple SQL statements in a single query using the node-mys...
    程式設計 發佈於2025-07-05
  • Async Void vs. Async Task在ASP.NET中:為什麼Async Void方法有時會拋出異常?
    Async Void vs. Async Task在ASP.NET中:為什麼Async Void方法有時會拋出異常?
    在ASP.NET async void void async void void void void void的設計無需返回asynchroncon而無需返回任務對象。他們在執行過程中增加未償還操作的計數,並在完成後減少。在某些情況下,這種行為可能是有益的,例如未期望或明確預期操作結果的火災和...
    程式設計 發佈於2025-07-05
  • 為什麼PHP的DateTime :: Modify('+1個月')會產生意外的結果?
    為什麼PHP的DateTime :: Modify('+1個月')會產生意外的結果?
    使用php dateTime修改月份:發現預期的行為在使用PHP的DateTime類時,添加或減去幾個月可能並不總是會產生預期的結果。正如文檔所警告的那樣,“當心”這些操作的“不像看起來那樣直觀。 ; $ date->修改('1個月'); //前進1個月 echo $ date->...
    程式設計 發佈於2025-07-05
  • 如何使用Python理解有效地創建字典?
    如何使用Python理解有效地創建字典?
    在python中,詞典綜合提供了一種生成新詞典的簡潔方法。儘管它們與列表綜合相似,但存在一些顯著差異。 與問題所暗示的不同,您無法為鑰匙創建字典理解。您必須明確指定鍵和值。 For example:d = {n: n**2 for n in range(5)}This creates a dict...
    程式設計 發佈於2025-07-05
  • 在Ubuntu/linux上安裝mysql-python時,如何修復\“ mysql_config \”錯誤?
    在Ubuntu/linux上安裝mysql-python時,如何修復\“ mysql_config \”錯誤?
    mysql-python安裝錯誤:“ mysql_config找不到”“ 由於缺少MySQL開發庫而出現此錯誤。解決此問題,建議在Ubuntu上使用該分發的存儲庫。使用以下命令安裝Python-MysqldB: sudo apt-get安裝python-mysqldb sudo pip in...
    程式設計 發佈於2025-07-05
  • \“(1)vs.(;;):編譯器優化是否消除了性能差異?\”
    \“(1)vs.(;;):編譯器優化是否消除了性能差異?\”
    答案: 在大多數現代編譯器中,while(1)和(1)和(;;)之間沒有性能差異。編譯器: perl: 1 輸入 - > 2 2 NextState(Main 2 -E:1)V-> 3 9 Leaveloop VK/2-> A 3 toterloop(next-> 8 last-> 9 ...
    程式設計 發佈於2025-07-05
  • Android如何向PHP服務器發送POST數據?
    Android如何向PHP服務器發送POST數據?
    在android apache httpclient(已棄用) httpclient httpclient = new defaulthttpclient(); httppost httppost = new httppost(“ http://www.yoursite.com/script.p...
    程式設計 發佈於2025-07-05
  • 如何在無序集合中為元組實現通用哈希功能?
    如何在無序集合中為元組實現通用哈希功能?
    在未訂購的集合中的元素要糾正此問題,一種方法是手動為特定元組類型定義哈希函數,例如: template template template 。 struct std :: hash { size_t operator()(std :: tuple const&tuple)const {...
    程式設計 發佈於2025-07-05
  • 為什麼PYTZ最初顯示出意外的時區偏移?
    為什麼PYTZ最初顯示出意外的時區偏移?
    與pytz 最初從pytz獲得特定的偏移。例如,亞洲/hong_kong最初顯示一個七個小時37分鐘的偏移: 差異源利用本地化將時區分配給日期,使用了適當的時區名稱和偏移量。但是,直接使用DateTime構造器分配時區不允許進行正確的調整。 example pytz.timezone(&#...
    程式設計 發佈於2025-07-05
  • 如何避免Go語言切片時的內存洩漏?
    如何避免Go語言切片時的內存洩漏?
    ,a [j:] ...雖然通常有效,但如果使用指針,可能會導致內存洩漏。這是因為原始的備份陣列保持完整,這意味著新切片外部指針引用的任何對象仍然可能佔據內存。 copy(a [i:] 對於k,n:= len(a)-j i,len(a); k
    程式設計 發佈於2025-07-05
  • 人臉檢測失敗原因及解決方案:Error -215
    人臉檢測失敗原因及解決方案:Error -215
    錯誤處理:解決“ error:( - 215)!empty()in Function openCv in Function MultSiscale中的“檢測”中的錯誤:在功能檢測中。”當Face Cascade分類器(即面部檢測至關重要的組件)未正確加載時,通常會出現此錯誤。 要解決此問題,必...
    程式設計 發佈於2025-07-05

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

Copyright© 2022 湘ICP备2022001581号-3