1. 程式人生 > 其它 >[轉載]MySQL使用儲存過程建立百萬級別測試資料

[轉載]MySQL使用儲存過程建立百萬級別測試資料

大佬地址,請優先檢視!請優先檢視!請優先檢視!
https://www.cnblogs.com/bobobobobo/p/13268389.html

建表

CREATE TABLE `usertb` (
  `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
  `uname` varchar(20) DEFAULT NULL,
  `ucreatetime` datetime DEFAULT NULL,
  `age` int(11) DEFAULT NULL,
  UNIQUE KEY `id` (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=76601101 DEFAULT CHARSET=utf8 ROW_FORMAT=COMPACT

建立儲存過程


CREATE DEFINER=`root`@`localhost` PROCEDURE `NewProc`( )
BEGIN
declare v_cnt decimal (10)  default 0 ;
 
DECLARE uname VARCHAR(20);
DECLARE uname2 VARCHAR(20);
DECLARE uname3 VARCHAR(20);
DECLARE uname4 VARCHAR(20);
DECLARE uname5 VARCHAR(20);
  -- 隨機姓名 可根據需要增加/減少樣本
set @SURNAME = '王李張劉陳楊黃趙吳周徐孫馬朱胡郭何高林羅鄭樑謝宋唐位許韓馮鄧曹彭曾蕭田董潘袁於蔣蔡餘杜葉程蘇魏呂丁任沈姚盧姜崔鍾譚陸汪範金石廖賈夏韋傅方白鄒孟熊秦邱江尹薛閻段雷侯龍史陶黎賀顧毛郝龔邵萬錢嚴覃武戴莫孔向湯';
  
set @NAME = '丹舉義之樂書乾雲亦從代以偉佑俊修健傲兒元光蘭冬冰冷凌凝凡凱初力勤千卉半華南博又友同向君聽和哲嘉國堅城夏夜天奇奧如妙子存季孤宇安宛宸寒尋爾堯山嵐峻巧平幼康建開弘強彤彥彬彭心憶志念懷憐恨惜慕成擎敏文新旋旭昊明易昕映春昱晉曉晗晟景晴智曼朋朗傑鬆楓柏柔柳格桃夢楷槐正水沛波澤潔洋濟浦浩海濤潤涵淵源溥濮瀚靈燦炎煙燁然煊煜熙熠玉珊珍理琪琴瑜瑞瑤瑾璞痴皓盼真睿碧磊祥祺秉程立竹笑紫紹經綠群翠翰致航良芙芷蒼苑若茂榮蓮菡菱萱蓉藍蕊蕾薇蝶覓訪誠語谷豪賦超越軒輝達遠邃醉金鑫錦問雁雅雨雪霖霜露青靖靜風飛香馳騫高鴻鵬鶴黎';
  
dd:loop
        set v_cnt = v_cnt+1 ;
                 
                -- length(@surname)/3 是因為中文字元佔用3個長度
                set uname = concat(substr(@surname,floor(rand()*length(@surname)/3+1),1), substr(@NAME,floor(rand()*length(@NAME)/3+1),1), substr(@NAME,floor(rand()*length(@NAME)/3+1),1));
                set uname2 = concat(substr(@surname,floor(rand()*length(@surname)/3+1),1), substr(@NAME,floor(rand()*length(@NAME)/3+1),1), substr(@NAME,floor(rand()*length(@NAME)/3+1),1));
                set uname3 = concat(substr(@surname,floor(rand()*length(@surname)/3+1),1), substr(@NAME,floor(rand()*length(@NAME)/3+1),1), substr(@NAME,floor(rand()*length(@NAME)/3+1),1));
                set uname4 = concat(substr(@surname,floor(rand()*length(@surname)/3+1),1), substr(@NAME,floor(rand()*length(@NAME)/3+1),1), substr(@NAME,floor(rand()*length(@NAME)/3+1),1));
                set uname5 = concat(substr(@surname,floor(rand()*length(@surname)/3+1),1), substr(@NAME,floor(rand()*length(@NAME)/3+1),1), substr(@NAME,floor(rand()*length(@NAME)/3+1),1));
 
                insert  into usertb values
                (null,uname,concat(floor(2010+rand()*10),'-',floor(1+rand()*11),'-',floor(1+rand()*26),' ', floor(10+rand()*10),':',floor(10+rand()*49),':',floor(10+rand()*49)),FLOOR(1 + (RAND() * 99))),
                (null,uname2,concat(floor(2010+rand()*10),'-',floor(1+rand()*11),'-',floor(1+rand()*26),' ', floor(10+rand()*10),':',floor(10+rand()*49),':',floor(10+rand()*49)),FLOOR(1 + (RAND() * 99))),
                (null,uname3,concat(floor(2010+rand()*10),'-',floor(1+rand()*11),'-',floor(1+rand()*26),' ', floor(10+rand()*10),':',floor(10+rand()*49),':',floor(10+rand()*49)),FLOOR(1 + (RAND() * 99))),
                (null,uname4,concat(floor(2010+rand()*10),'-',floor(1+rand()*11),'-',floor(1+rand()*26),' ', floor(10+rand()*10),':',floor(10+rand()*49),':',floor(10+rand()*49)),FLOOR(1 + (RAND() * 99))),
                (null,uname5,concat(floor(2010+rand()*10),'-',floor(1+rand()*11),'-',floor(1+rand()*26),' ', floor(10+rand()*10),':',floor(10+rand()*49),':',floor(10+rand()*49)),FLOOR(1 + (RAND() * 99)));
                         
            if  v_cnt = 1000000 then leave dd;
            end if;
        end loop dd ;
     
END;

  

經過測試建立5百萬資料花了大約100秒