教你使用MySQL僅調用一個存儲過程創建三千萬條數據

通常我們要創建幾條數據通過一條條插入是沒問題,但是當我們插入的是100條、1000條、甚至接下來我們要演示的三千萬條,顯然只有通過更加便捷的方式纔是可取的,因爲對於需要批量處理和重複性很高的業務可以封裝存儲過程,然後一個調用即可(如果還沒了解過MySQL的存儲過程的小夥伴,可以看我下面這篇文章,這裏不再贅述)

MySQL存儲過程(最全最通透)

接下來教你如何使用MySQL僅調用一個存儲過程創建三千萬條數據
首先創建一個user表
在這裏插入圖片描述
然後寫我們的代碼
這裏有一個需要注意的點:
存儲過程中設置了不自動提交SQL(就是下面這句),爲什麼呢?

SET autocommit = 0;	-- 設置不自動提交SQL

因爲我們每循環一次插入一條數據,需要走兩步,一步插入業務,一步自動提交業務,插入少量數據的話當然沒有問題,但是當要插入的數據量是三千萬條,相當於兩步乘上三千萬條數據,可想而知有得等。但是設置了不自動提交,那麼就會等你執行完所有插入業務,才統一用 commit 提交一次(簡單的說就是存夠了三千萬數據纔給你提交上去),提高了效率。

代碼示例

DELIMITER //	-- 重置分隔符
CREATE PROCEDURE addUser(IN number INT)	-- 定義一個int類型參數傳參
BEGIN
	DECLARE i INT DEFAULT 0;	-- 定義int類型變量i默認值爲0
	SET autocommit = 0;	-- 設置不自動提交SQL
	WHILE i < number DO
	INSERT INTO user(username,password,sex,phone) VALUES(CONCAT("用戶_",i),UUID(),ROUND(RAND()*1),FLOOR(RAND()*(999999999-100000000)+100000000));
	SET i = i + 1;
	END WHILE;
	COMMIT;	-- 要記得提交,否則數據不會顯示在圖形界面,那麼它的業務是在未提交狀態
END	//

運行完上面的存儲過程,那麼它會保存到數據庫字典中,我們直接CALL 【存儲過程名】調用存儲過程。

CALL addUser(30000000);	-- 傳入30000000值,調用存儲過程

…信息區一片空白,還在執行中,三千萬條數據不是開玩笑的
在這裏插入圖片描述
一個多小時之後…

最後運行結果
在這裏插入圖片描述
建議:
最好還是創建一兩百萬條數據就可以了(在調用時改參數即可),畢竟三千萬數據可是讓我苦苦的等上一個多小時呢
(當了一回小白鼠,要四連的哦!)

當然如果你對你的計算機很有自信的話,不妨可以試試,哈哈(但是還是請勿模仿)…

最後:
可能有一些小夥伴會有疑問,爲什麼需要去創建一個大的數據量呢?

因爲我們在接觸SQL的時候會發現對數據的查詢是我們最常見也是最常用的。一般公司做的項目數據量稍微大一些,如何對SQL查詢性能優化是不得不解決的問題,這也是爲什麼會成爲面試時的重災區。但是如果我們還處在學習階段,面對的數據量通常都是很小的,那麼就很難考慮到查詢上的性能問題,以及如何去優化的問題,例如可以通過建立索引的方式來優化,這也是我下一篇我會寫的博客文章,如何通過建立索引來提高我們的檢索效率,纔是真正的主菜。

我是一顆剽悍的種子,一顆偏愛前端的後端新司機。把我會的認真的分享是我寫博客的信條,把我代碼帶走,把你的四連留下,點贊、評論、留言、關注是我寫博客的最大動力,哈哈。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章