快速生成百萬(wàn)級(jí)測(cè)試數(shù)據(jù)

我們?cè)谧鲂阅苷{(diào)優(yōu)時(shí),需要有大數(shù)據(jù)量的測(cè)試數(shù)據(jù)让腹,才能很好的反應(yīng)我們的數(shù)據(jù)庫(kù)及sql語(yǔ)句性能远剩,這就需要們生成百萬(wàn)級(jí)的測(cè)試數(shù)據(jù)骇窍,這里提供一個(gè)快速生成百萬(wàn)級(jí)測(cè)試數(shù)據(jù)的方法瓜晤,利用存儲(chǔ)過(guò)程快速生成像鸡,在我個(gè)人電腦實(shí)測(cè)百萬(wàn)級(jí)數(shù)據(jù)約10分鐘左右活鹰。
創(chuàng)建測(cè)試表

-- 用戶(hù)表
CREATE TABLE `person` (
  `id` bigint(20) unsigned NOT NULL,
  `fname` varchar(100) NOT NULL,
  `lname` varchar(100) NOT NULL,
  `age` tinyint(3) unsigned NOT NULL,
  `sex` tinyint(1) unsigned NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=INNODB DEFAULT CHARSET=utf8

--用戶(hù)部門(mén)表
CREATE TABLE `department` (
  `id` bigint(20) unsigned NOT NULL,
  `department` varchar(100) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=INNODB DEFAULT CHARSET=utf8

-- 用戶(hù)住址表
CREATE TABLE `address` (
  `id` bigint(20) unsigned NOT NULL,
  `address` varchar(100) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=INNODB DEFAULT CHARSET=utf8

創(chuàng)建存儲(chǔ)過(guò)程只估,用于批量添加測(cè)試數(shù)據(jù)

delimiter $$
drop procedure if exists generate;
CREATE DEFINER=`root`@`localhost` PROCEDURE `generate`(IN num INT)
BEGIN   

DECLARE chars VARCHAR(100) DEFAULT 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789';

DECLARE fname VARCHAR(10) DEFAULT '';
DECLARE lname VARCHAR(25) DEFAULT '';
DECLARE id int UNSIGNED;
DECLARE len int;
set id=1;
DELETE from person;
WHILE id <= num DO
set len = FLOOR(1 + RAND()*10);
set fname = '';
WHILE len > 0 DO
SET fname = CONCAT(fname,substring(chars,FLOOR(1 + RAND()*62),1));
SET len = len - 1;
END WHILE;
set len = FLOOR(1+RAND()*25);
set lname = '';
WHILE len > 0 DO
SET lname = CONCAT(lname,SUBSTR(chars,FLOOR(1 + RAND()*62),1));
SET len = len - 1;
END WHILE;
INSERT into person VALUES (id,fname,lname, FLOOR(RAND()*100), FLOOR(RAND()*2));
set id = id + 1;
END WHILE;
END $$

delimiter $$
drop procedure if exists genDepAdd;
CREATE DEFINER=`root`@`localhost` PROCEDURE `genDepAdd`(IN num INT)
BEGIN   

DECLARE chars VARCHAR(100) DEFAULT '行政技術(shù)研發(fā)財(cái)務(wù)人事開(kāi)發(fā)公關(guān)推廣營(yíng)銷(xiāo)咨詢(xún)客服運(yùn)營(yíng)測(cè)試';
DECLARE chars2 VARCHAR(100) DEFAULT '北京上海青島重慶成都安徽福建浙江杭州深圳溫州內(nèi)蒙古天津河北西安三期';

DECLARE depart VARCHAR(10) DEFAULT '';
DECLARE address VARCHAR(25) DEFAULT '';
DECLARE id int UNSIGNED;
DECLARE len int;
set id=1;
WHILE id <= num DO
set len = FLOOR(2 + RAND()*2);
set depart = '';
WHILE len > 0 DO
SET depart = CONCAT(depart,substring(chars,FLOOR(1 + RAND()*26),1));
SET len = len - 1;
END WHILE;
set depart=CONCAT(depart,'部');
set len = FLOOR(6+RAND()*18);
set address = '';
WHILE len > 0 DO
SET address = CONCAT(address,SUBSTR(chars2,FLOOR(1 + RAND()*33),1));
SET len = len - 1;
END WHILE;

INSERT into department VALUES (id,depart);
INSERT into address VALUES (id,address);
set id = id + 1;
END WHILE;
END $$

為了提高速度,可以暫停事務(wù)蛔钙。測(cè)試添加100萬(wàn)隨機(jī)數(shù)據(jù)锌云,大概600s左右時(shí)間吁脱。

-- 停掉事務(wù)
set autocommit = 0;  
-- 調(diào)用存儲(chǔ)過(guò)程
call generate(1000000);
-- call genDepAdd(1000000);
-- 重啟事務(wù)
set autocommit = 1;  
image.png

對(duì)比MyIsam:當(dāng)創(chuàng)建表時(shí)選擇MyIsam格式桑涎,插入數(shù)據(jù)會(huì)很慢兼贡,僅僅3000條數(shù)據(jù)就需要2分鐘的時(shí)間攻冷,由此可見(jiàn)MyIsam和InnoDB的差距還是很大的。另外在執(zhí)行過(guò)程中可以發(fā)現(xiàn)MyIsam插入的數(shù)據(jù)可以在表中實(shí)時(shí)看到遍希,而InnoDB做了事務(wù)最終一次提交等曼,所以數(shù)據(jù)不能實(shí)時(shí)看到,只有存儲(chǔ)過(guò)程全部執(zhí)行完成后才可以看到數(shù)據(jù)。

image.png
上一篇 《性能優(yōu)化系列文章目錄》 下一篇
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末禁谦,一起剝皮案震驚了整個(gè)濱河市胁黑,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌州泊,老刑警劉巖丧蘸,帶你破解...
    沈念sama閱讀 216,591評(píng)論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異遥皂,居然都是意外死亡力喷,警方通過(guò)查閱死者的電腦和手機(jī)演训,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,448評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門(mén)冗懦,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)仇祭,“玉大人披蕉,你說(shuō)我怎么就攤上這事乌奇∶唤玻” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 162,823評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵爬凑,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我嘁信,道長(zhǎng),這世上最難降的妖魔是什么疏叨? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,204評(píng)論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮蚤蔓,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘秀又。我一直安慰自己单寂,他們只是感情好吐辙,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,228評(píng)論 6 388
  • 文/花漫 我一把揭開(kāi)白布宣决。 她就那樣靜靜地躺著昏苏,像睡著了一般尊沸。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上椒丧,一...
    開(kāi)封第一講書(shū)人閱讀 51,190評(píng)論 1 299
  • 那天救巷,我揣著相機(jī)與錄音壶熏,去河邊找鬼。 笑死棒假,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的精盅。 我是一名探鬼主播,決...
    沈念sama閱讀 40,078評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼叹俏,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了粘驰?” 一聲冷哼從身側(cè)響起屡谐,我...
    開(kāi)封第一講書(shū)人閱讀 38,923評(píng)論 0 274
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤蝌数,失蹤者是張志新(化名)和其女友劉穎愕掏,沒(méi)想到半個(gè)月后顶伞,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體饵撑,經(jīng)...
    沈念sama閱讀 45,334評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡唆貌,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,550評(píng)論 2 333
  • 正文 我和宋清朗相戀三年滑潘,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了锨咙。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片众羡。...
    茶點(diǎn)故事閱讀 39,727評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡蓖租,死狀恐怖粱侣,靈堂內(nèi)的尸體忽然破棺而出蓖宦,到底是詐尸還是另有隱情齐婴,我是刑警寧澤稠茂,帶...
    沈念sama閱讀 35,428評(píng)論 5 343
  • 正文 年R本政府宣布柠偶,位于F島的核電站,受9級(jí)特大地震影響诱担,放射性物質(zhì)發(fā)生泄漏毡证。R本人自食惡果不足惜蔫仙,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,022評(píng)論 3 326
  • 文/蒙蒙 一料睛、第九天 我趴在偏房一處隱蔽的房頂上張望涮俄。 院中可真熱鬧点把,春花似錦娃承、人聲如沸兢哭。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,672評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)喜喂。三九已至竿裂,卻和暖如春夜惭,著一層夾襖步出監(jiān)牢的瞬間铛绰,已是汗流浹背诈茧。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,826評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工捂掰, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留敢会,地道東北人这嚣。 一個(gè)月前我還...
    沈念sama閱讀 47,734評(píng)論 2 368
  • 正文 我出身青樓鸥昏,卻偏偏與公主長(zhǎng)得像姐帚,于是被迫代替她去往敵國(guó)和親吏垮。 傳聞我的和親對(duì)象是個(gè)殘疾皇子罐旗,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,619評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容