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);

简单优化完成!

原文地址:https://www.cnblogs.com/haoranzhengqi/p/12234162.html

时间: 2024-10-15 17:56:30

mysql8.0如何快速生成100万数据人员信息数据的相关文章

SQLServer如何快速生成100万条不重复的随机8位数字

最近在论坛看到有人问,如何快速生成100万不重复的8位编号,对于这个问题,有几点是需要注意的: 1.    如何生成8位随机数,生成的数越随机,重复的可能性当然越小 2.    控制不重复 3.    考虑性能 针对这个问题,我写了如下的示例来解决,希望能为有这类需求的人提供指导 */ USE tempdb GO --创建测试表 CREATE TABLE tb(id char(8)) --创建用于自动过滤重复值的唯一索引 CREATE UNIQUE INDEX IX_tb ON tb(id) W

运用简单的bloomfilter算法生成100万个不重复的随机数

本文中只是简单的体会bloomFilter算法的基本原理,设计实现一个生成100万个不重复的随机数. 选择3个分布均匀质数,在这里面质数的选择还是挺有讲究的,要注意不能太小,必须能够满足bloomfilter空间,不然整个空间都是1了还没有找到100万个不重复的随机数.不多说,上代码. #include<stdio.h> #include<stdlib.h> #include<time.h> #include<cstdbool> #define MAXNUM

【转】Oracle中如何用一条SQL快速生成10万条测试数据

转自http://blog.csdn.net/welken/article/details/4971887 做数据库开发或管理的人经常要创建大量的测试数据,动不动就需要上万条,如果一条一条的录入,那会浪费大量的时间,本文介绍了Oracle中如何通过一条SQL快速生成大量的测试数据的方法. 产生测试数据的SQL如下: SQL> select rownum as id,  2                 to_char(sysdate + rownum / 24 / 3600, 'yyyy-mm

生成100万行8位纯数字的随机数(转)

本人转自http://www.cnblogs.com/goody9807/archive/2011/07/01/2095380.html,感谢博主的辛勤写作! 如何快速生成100万不重复的8位编号,对于这个问题,有几点是需要注意的:1.    如何生成8位随机数,生成的数越随机,重复的可能性当然越小2.    控制不重复3.    考虑性能针对这个问题,我写了如下的示例来解决,希望能为有这类需求的人提供指导 生成100万条8位不重复数据的示例 USE tempdbGO -- 1.创建测试表CRE

zt:如何快速赚取人生第一个100万?

投递人 itwriter 发布于 2016-06-20 23:43 评论(16) 有1795人阅读 原文链接 [收藏] « » 不久前我开始使用「分答」,将回答问题的价格设置成 10 元.花最长 1 分钟的时间回答一条问题,对我来说没有损失:花 10 元问一条回答最长只有 60 秒的问题,提问者不会有很高的期待.所以这样的「交易」一直持续着. 几乎每天,都有人给我提类似以下的问题: “作为一个年轻人,怎样赚到第一个十万(百万)?请给出可行方案.” 比如这个: 再比如这个: 又类似这个: 中国有句

MySQL8.0新特性【转】

Server层,选项持久化 mysql> show variables like '%max_connections%'; +------------------------+-------+ | Variable_name | Value | +------------------------+-------+ | max_connections | 512 | | mysqlx_max_connections | 100 | +------------------------+-------

MySQL快速生成本地测试数据

利用数据的存储过程生成测试数据: 我们可以通过数据库的的 INSERT 语句直接在存储过程中向普通数据表中添加数据,但是 当我们添加到百万数据后,往普通表插入测试数据的性能就会明显降低.所以在这里建议 使用内存表做一个中间铺垫,在内存表中生成完百万条数据后,在一次性的插入普通数据表 即可完成百万条测试数据生成.下面我们看过程: 第一步创建内存表: CREATE TABLE `vote_record_memory` ( `id` INT (11) NOT NULL AUTO_INCREMENT,

mysql8.0 for windows环境配置

1.安装 zip压缩包解压后,需要设置环境变量. MYSQL_HOME = E:\mysql-8.0.16-winx64 在path中,增加变量%MYSQL_HOME%\bin 2.初始化 在安装根目录创建my.ini [mysqld] # 设置3306端口 port=3306 # 设置mysql的安装目录 basedir=E:\mysql-8.0.16-winx64 # 设置mysql数据库的数据的存放目录 datadir=E:\mysql-8.0.16-winx64\data # 允许最大连

100万个数据,数据值在0~65535之间,请用尽可能少的内存和最快的速度从小到大排序

场景说明:100万个数据,数据值在0~65535之间,请用尽可能少的内存和最快的速度从小到大排序 voidsort(int* array, int n) { //n的值在100万左右 //你的实现 } 我们首先观察到所有的数据已经保存到了array数组中,现在我们需要做的就是将数组中的元素排序.现在我们把数组中的元素提取出来比如是3,然后我们提取出数组下标是3的元素,保存到临时空间,通过负数来计算个数: void sort(int* array, int n) {     int tmp=0;