Mysql使用儲存過程快速新增百萬資料

大雄45發表於2021-09-08
導讀 這篇文章主要介紹了Mysql使用儲存過程快速新增百萬資料,本文透過例項程式碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑑價值,需要的朋友可以參考下
前言

為了體現不加索引和新增索引的區別,需要使用百萬級的資料,但是百萬資料的表,如果使用一條條新增,特別繁瑣又麻煩,這裡使用儲存過程快速新增資料,用時大概4個小時。

建立一個使用者表

CREATE TABLE `t_sales` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `username` varchar(32) COLLATE utf8_bin DEFAULT NULL COMMENT '使用者名稱',
  `password` varchar(64) COLLATE utf8_bin DEFAULT NULL COMMENT '密碼 MD5儲存',
  `register_time` timestamp NULL DEFAULT NULL COMMENT '註冊時間',
  `type` int(1) DEFAULT NULL COMMENT '使用者型別 1,2,3,4 隨機',
  PRIMARY KEY (`id`),
  KEY `idx_username` (`username`) USING BTREE
)

然後建立儲存過程,批次新增資料。

使用者名稱以常量和數字拼接

密碼是MD5密碼

註冊時間是當前時間隨機往前推幾天

type是取1-4隨機範圍值

create procedure salesAdd()
begin
 declare i int default 11;
   while i <= 4000000 do
         insert into blog.t_sales
         (`username`,`password`,`register_time`,type) values
         (concat("jack",i),MD5(concat("psswe",i)),from_unixtime(unix_timestamp(now()) - floor(rand() * 800000)),floor(1 + rand() * 4)); 
         set i = i + 1; 
   end while; 
end

然後呼叫儲存過程

call salesAdd()
改進版

雖然使用儲存過程新增資料相對一個個新增更加便捷,快速,但是新增幾百萬資料要花幾個小時時間也是很久的,後面在網上找到不少資料,發現mysql每次執行一條語句都預設自動提交,這個操作非常耗時,所以在在新增去掉自動提交。設定 SET AUTOCOMMIT = 0;

create procedure salesAdd()
begin
 declare i int default 1;
 set autocommit = 0;   
   while i <= 4000000 do
         insert into blog.t_sales
         (`username`,`password`,`register_time`,type) values
         (concat("jack",i),MD5(concat("psswe",i)),from_unixtime(unix_timestamp(now()) - floor(rand() * 800000)),floor(1 + rand() * 4)); 
         set i = i + 1; 
   end while;
 set autocommit = 1;     
end

執行時間387秒,約為六分鐘,其中還有一半時間用於md5、隨機數的計算。

[SQL]
call salesAdd();
受影響的行: 0
時間: 387.691s

到此這篇關於Mysql使用儲存過程快速新增百萬資料的文章就介紹到這了

原文來自:

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69955379/viewspace-2791120/,如需轉載,請註明出處,否則將追究法律責任。

相關文章