mysql8.0如何快速生成100万数据人员信息数据

Posted hr18646392923

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了mysql8.0如何快速生成100万数据人员信息数据相关的知识,希望对你有一定的参考价值。

在爱学习mysql优化时 我需要大量数据才检测sql语句的效率

下面给大家模拟一个生成100万人员信息的数据的范例

 

创建一个数据库  名为test

建立表

create table t(id         bigint not null auto_increment primary key,
         mobile     bigint,
         password   varchar(64),
         username   varchar(64),
         sex        tinyint not null default 1,
         birthday   datetime,
         amount     decimal(18,2), 
         ismaster   bool,
         istest     bit(1), 
         updatetime datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP);

 

编写存储过程


编写了一个随机编号和随机姓名的sql代码

DELIMITER $$
DROP PROCEDURE IF EXISTS proc_gen_user;
CREATE PROCEDURE proc_gen_user(l_cnt BIGINT)
BEGIN
   DECLARE X INT DEFAULT 0;
   DECLARE p CHAR(11);
 
   WHILE X < l_cnt
   DO
      SET X = X + 1;
      SET p =
             CONCAT(\'1\',
                    SUBSTRING(CAST(3 + (RAND() * 10) % 7 AS CHAR(50)), 1, 1),
                    RIGHT(LEFT(TRIM(CAST(RAND() AS CHAR(50))), 11), 9));
      INSERT INTO t(mobile,PASSWORD,username,sex,birthday,amount,ismaster,istest)
         VALUES (
                   p,
                   MD5(CEILING(RAND() * 1000000)),
                   CONCAT(
                     SUBSTRING(REPLACE(\'赵钱孙李周吴郑王冯陈褚卫蒋沈韩杨朱秦尤许何吕施张
                          孔曹严华金魏陶姜戚谢邹喻柏水窦章云苏潘葛奚范彭郎
                          鲁韦昌马苗凤花方俞任袁柳酆鲍史唐费廉岑薛雷贺倪汤
                          滕殷罗毕郝邬安常乐于时傅皮卞齐康伍余元卜顾孟平黄
                          和穆萧尹姚邵湛汪祁毛禹狄米贝明臧计伏成戴谈宋茅庞
                          熊纪舒屈项祝董梁杜阮蓝闵席季麻强贾路娄危江童颜郭
                          梅盛林刁钟徐邱骆高夏蔡田樊胡凌霍虞万支柯昝管卢莫
                          经房裘缪干解应宗丁宣贲邓郁单杭洪包诸左石崔吉钮龚
                          程嵇邢滑裴陆荣翁荀羊於惠甄曲家封芮羿储靳汲邴糜松
                          井段富巫乌焦巴弓牧隗山谷车侯宓蓬全郗班仰秋仲伊宫
                          宁仇栾暴甘钭厉戎祖武符刘景詹束龙叶幸司韶郜黎蓟薄
                          印宿白怀蒲邰从鄂索咸籍赖卓蔺屠蒙池乔阴鬱胥能苍双
                          闻莘党翟谭贡劳逄姬申扶堵冉宰郦雍卻璩桑桂濮牛寿通
                          边扈燕冀郏浦尚农温别庄晏柴瞿阎充慕连茹习宦艾鱼容
                          向古易慎戈廖庾终暨居衡步都耿满弘匡国文寇广禄阙东
                          欧殳沃利蔚越夔隆师巩厍聂晁勾敖融冷訾辛阚那简饶空
                          曾毋沙乜养鞠须丰巢关蒯相查后荆红游竺权逯盖益桓公\',\' \',\'\'),
                         FLOOR(1 + 400 * RAND()),1),
                      SUBSTRING(REPLACE(
                         \'明国华建文平志伟东海强晓生光林小民永杰军金健一忠洪江福祥中
                          正振勇耀春大宁亮宇兴宝少剑云学仁涛瑞飞鹏安亚泽世汉达卫利胜
                          敏群波成荣新峰刚家龙德庆斌辉良玉俊立浩天宏子松克清长嘉红山
                          贤阳乐锋智青跃元武广思雄锦威启昌铭维义宗英凯鸿森超坚旭政传
                          康继翔栋仲权奇礼楠炜友年震鑫雷兵万星骏伦绍麟雨行才希彦兆贵
                          源有景升惠臣慧开章润高佳虎根远力进泉茂毅富博霖顺信凡豪树和
                          恩向道川彬柏磊敬书鸣芳培全炳基冠晖京欣廷哲保秋君劲轩帆若连
                          勋祖锡吉崇钧田石奕发洲彪钢运伯满庭申湘皓承梓雪孟其潮冰怀鲁
                          裕翰征谦航士尧标洁城寿枫革纯风化逸腾岳银鹤琳显焕来心凤睿勤
                          延凌昊西羽百捷定琦圣佩麒虹如靖日咏会久昕黎桂玮燕可越彤雁孝
                          宪萌颖艺夏桐月瑜沛诚夫声冬奎扬双坤镇楚水铁喜之迪泰方同滨邦
                          先聪朝善非恒晋汝丹为晨乃秀岩辰洋然厚灿卓杨钰兰怡灵淇美琪亦
                          晶舒菁真涵爽雅爱依静棋宜男蔚芝菲露娜珊雯淑曼萍珠诗璇琴素梅
                          玲蕾艳紫珍丽仪梦倩伊茜妍碧芬儿岚婷菊妮媛莲娟一\',\' \',\'\'),
                         FLOOR(1 + 400 * RAND()),1),
                      SUBSTRING(REPLACE(
                         \'明国华建文平志伟东海强晓生光林小民永杰军金健一忠洪江福祥中
                          正振勇耀春大宁亮宇兴宝少剑云学仁涛瑞飞鹏安亚泽世汉达卫利胜
                          敏群波成荣新峰刚家龙德庆斌辉良玉俊立浩天宏子松克清长嘉红山
                          贤阳乐锋智青跃元武广思雄锦威启昌铭维义宗英凯鸿森超坚旭政传
                          康继翔栋仲权奇礼楠炜友年震鑫雷兵万星骏伦绍麟雨行才希彦兆贵
                          源有景升惠臣慧开章润高佳虎根远力进泉茂毅富博霖顺信凡豪树和
                          恩向道川彬柏磊敬书鸣芳培全炳基冠晖京欣廷哲保秋君劲轩帆若连
                          勋祖锡吉崇钧田石奕发洲彪钢运伯满庭申湘皓承梓雪孟其潮冰怀鲁
                          裕翰征谦航士尧标洁城寿枫革纯风化逸腾岳银鹤琳显焕来心凤睿勤
                          延凌昊西羽百捷定琦圣佩麒虹如靖日咏会久昕黎桂玮燕可越彤雁孝
                          宪萌颖艺夏桐月瑜沛诚夫声冬奎扬双坤镇楚水铁喜之迪泰方同滨邦
                          先聪朝善非恒晋汝丹为晨乃秀岩辰洋然厚灿卓杨钰兰怡灵淇美琪亦
                          晶舒菁真涵爽雅爱依静棋宜男蔚芝菲露娜珊雯淑曼萍珠诗璇琴素梅
                          玲蕾艳紫珍丽仪梦倩伊茜妍碧芬儿岚婷菊妮媛莲娟一\',\' \',\'\'),
                         FLOOR(1 + 400 * RAND()),1)),
                   CEILING(RAND() * 10) % 2,
                   DATE(NOW()- INTERVAL (20 + CEILING(RAND() * 100) % 40) YEAR),
                   ROUND(RAND()*100000,2),
                   CEILING(RAND()*10)%2,
                   CEILING(RAND()*10)%2);     
   END WHILE;
END$$
DELIMITER ;

 

 

执行计划


输入你要生成数据 一下以100万数据为例

 call proc_gen_user(1000000);

大约1个小时5分 完成!

接下来查询一下

 

 统计一下(楼主之前插入了1000条 - - !)

 

 

索引优化

我们分析一下查用的sql语句

 

没有加索引的 一个简单查询0.6秒

咱们创建一个简单的索引

create index ix_mobile on t(mobile);

 

 

简单优化完成!

 

以上是关于mysql8.0如何快速生成100万数据人员信息数据的主要内容,如果未能解决你的问题,请参考以下文章

MySQL快速生成大量测试数据(100万、1000万、1亿)

万答#18,MySQL8.0 如何快速回收膨胀的UNDO表空间

如何测试网站最大并发数

MySQL8.0--------高达300万QPS泰坦实践

MySQL8.0快速回收膨胀的UNDO表空间

MySQL8.0数据库安装