通常我們要創建幾條數據通過一條條插入是沒問題,但是當我們插入的是100條、1000條、甚至接下來我們要演示的三千萬條,顯然只有通過更加便捷的方式纔是可取的,因爲對於需要批量處理和重複性很高的業務可以封裝存儲過程,然後一個調用即可(如果還沒了解過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查詢性能優化是不得不解決的問題,這也是爲什麼會成爲面試時的重災區。但是如果我們還處在學習階段,面對的數據量通常都是很小的,那麼就很難考慮到查詢上的性能問題,以及如何去優化的問題,例如可以通過建立索引的方式來優化,這也是我下一篇我會寫的博客文章,如何通過建立索引來提高我們的檢索效率,纔是真正的主菜。
我是一顆剽悍的種子,一顆偏愛前端的後端新司機。把我會的認真的分享是我寫博客的信條,把我代碼帶走,把你的四連留下,點贊、評論、留言、關注是我寫博客的最大動力,哈哈。