在测试功能的时候需要生千万级甚至亿级别的,可以通过写MySQL的存储过程来模拟真实的用户信息。

说明:

该存储过程使用基于id作为自增主键, 有手机号是随机生成,可能会有少量重复手机号码,后面有滤重SQL脚本。
如果想一次性生成不重复手机号码,可以考虑修改以下脚本,去掉uid,基于mobile列作为主键

表的定义:

mysql> select version();
+-----------+
| version() |
+-----------+
| 8.0.16    |
+-----------+
1 row in set (0.00 sec)create table t(id         bigint not null auto_increment primary key,mobile     int,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);

存储过程:

DELIMITER $$
DROP PROCEDURE IF EXISTS proc_gen_user;
CREATE PROCEDURE proc_gen_user(l_cnt BIGINT)
BEGINDECLARE X INT DEFAULT 0;DECLARE p CHAR(11);WHILE X < l_cntDOSET 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 ;
生成数据:
mysql> call proc_gen_user(1000000);mysql> call proc_gen_user(10000);
Query OK, 1 row affected (37.56 sec)预估生产一定量级的数据需要耗时时间:
mysql> select date_format(updatetime,'%Y%m%d %H:%i'),count(1) from t group by date_format(updatetime,'%Y%m%d %H:%i');
+----------------------------------------+----------+
| date_format(updatetime,'%Y%m%d %H:%i') | count(1) |
+----------------------------------------+----------+
| 20190508 15:39                         |     1211 |
| 20190508 15:40                         |    15776 |
| 20190508 15:41                         |    15808 |
| 20190508 15:42                         |    15813 |
| 20190508 15:43                         |    15806 |
| 20190508 15:44                         |    15820 |
| 20190508 15:45                         |    15841 |
| 20190508 15:46                         |    15810 |
| 20190508 15:47                         |    15872 |
| 20190508 15:48                         |    15824 |
| 20190508 15:49                         |    15813 |
| 20190508 15:50                         |    15810 |
| 20190508 15:51                         |    15802 |
| 20190508 15:52                         |    15787 |
| 20190508 15:53                         |    15818 |
| 20190508 15:54                         |    15809 |
| 20190508 15:55                         |    15817 |
| 20190508 15:56                         |    15823 |
| 20190508 15:57                         |    15862 |
| 20190508 15:58                         |     3499 |
+----------------------------------------+----------+
20 rows in set (0.17 sec)mysql> select 1000000/15810;
+---------------+
| 1000000/15810 |
+---------------+
|       63.2511 |
+---------------+
1 row in set (0.00 sec)大约生成100万条记录需要63分钟。过滤和去除重复的手机号用户:
delete from t where mobile in (select mobile from (SELECT mobile  FROM t GROUP BY mobile HAVING count(*) > 1) a)and id not in (select id from (select min(id) from t group by t.mobile having count(1) >1) b);优化加索引:
create index ix_mobile on t(mobile);待改进 删除的性能比较低:DELETE FROM t WHERE EXISTS (SELECT 1 FROM (SELECT mobile  FROM t GROUP BY mobile HAVING COUNT(*) > 1) a WHERE a.mobile=t.mobile)AND NOT EXISTS (SELECT 1 FROM(   SELECT MIN(id) id FROM t GROUP BY t.mobile HAVING COUNT(1) >1) b WHERE b.id=t.id);  
生产测试的表和数据:a表的手机号mobile内为varchar(11)
b表为为char(11)
c表为bigint unsignedmysql> create table a like t;
Query OK, 0 rows affected (0.02 sec)mysql> create table b like t;
Query OK, 0 rows affected (0.02 sec)mysql> create table c like t;
Query OK, 0 rows affected (0.05 sec)alter table a modify mobile char(11);    alter table b modify mobile varchar(11); alter table c modify mobile int unsigned;建表时需要考虑的事项
作用:存储什么数据?
结构:包含什么列,需要约束吗?空约束和非空约束
存储:每一列使用什么数据类型?需要索引吗?
引擎:使用什么存储引擎呢?
数据筛选:哪些列被频繁用作过滤条件?增删改查频率?模糊查询和精确查询
数据备份:备份还原是否高效
数据脱敏:是否便于数据脱敏,保护数据安全测试:
1.数据存储,占用磁盘空间
2.无索引精确查询
3.无索引模糊查询
4.有索引精确查询
5.有索引模糊查询结论:
1.满足需求的前提使用更小长度的数据类型(更少磁盘占用,I/O,CPU,memory开销)
2.理论上整型优先原则,使用简单数据类型,同时兼顾查询使用等
3.避免使用NULL字段,NULL字段很难查询优化、NULL的索引需要额外空间、复合索引无效
4.少用text/blob,varchar的性能会比text高很多

MySQL 8.0 批量生产千万级用户、手机号等信息相关推荐

  1. 如何估算代码量_千万级用户的大型网站,应该如何设计其高并发架构?(彩蛋)...

    目录 (1)单块架构 (2)初步的高可用架构 (3)千万级用户量的压力预估 (4)服务器压力预估 (5)业务垂直拆分 (6)用分布式缓存抗下读请求 (7)基于数据库主从架构做读写分离 (8)总结 本文 ...

  2. 抖音、美团等大厂千万级用户的Android客户端架构演进之路—

    在移动开发中,对开发者来说不同的人具有不同的能力.就像读一本书一样,一千个读者,有一千个哈姆雷特.但不管怎样,只要你是个软件开发者你就必须学习windows或Linux等操作系统的运行原理.Andro ...

  3. 千万级用户产品更名为“亿图脑图 MindMaster”背后:脑图软件市场高速增长

    东尼·博赞发明思维导图导图时,大概没想到思维导图会变得如此受欢迎.数据显示,全球范围内,约有6亿人使用思维导图这一工具,其用户涵盖众多领域,包括企业家.政府.公司.学术机构等. 而作为一款功能全面的专 ...

  4. 千万级用户的Android客户端是如何养成的

    声明:本文来自「七牛云主办的架构师实践日--亿级移动应用架构最佳实践」的演讲内容整理.PPT.速记和现场演讲视频等参见"七牛架构师实践日"官网. 嘉宾:阿刘,in技术专家. 责编: ...

  5. mysql 给库赋权,MySQL 8.0.18给数据库添加用户和赋权问题

    MySQL 8.0.18给数据库添加用户和赋权问题 1. 首选使用root用户登录数据库 mysql -uroot -p 2. 使用mysql 数据库 USE mysql; 3. 为mysql创建用户 ...

  6. 面向千万级用户的运维事件管理之路

    本文整理自 GOPS2017·上海站演讲<面向千万级互联网证券用户的事件运维之路> 作者简介 作者简介:袁友高,一名IT男,2013年加入了平安证券,参与和见证了生产事件组的组建和发展. ...

  7. 千万级用户网站门户前端设计

    对于千万级的注册用户的门户项目是前端这块是怎么去实现的,自己在平常的工作中总结了一些经验,也是在不断的挫折中,不断演练的,希望总结出来给大家参考下,和大家一起探讨,一起进步. 一.门户设计一般会遇到哪 ...

  8. mysql如何进行压测_详解MySQL如何按表创建千万级的压测数据

    有时我们要对系统做压测,或者数据库压力测试,这时候需要对某些表插入几百万或者上千万数据,下面介绍下怎么利用MySQL循环和存储过程对特定表的创建千万行数据. 1. 准备测试表 CREATE TABLE ...

  9. mysql datetime 转date_详解MySQL如何按表创建千万级的压测数据

    概述 有时我们要对系统做压测,或者数据库压力测试,这时候需要对某些表插入几百万或者上千万数据,下面介绍下怎么利用MySQL循环和存储过程对特定表的创建千万行数据. 1.准备测试表 CREATE TAB ...

最新文章

  1. mysql分页取数每一页生成xml_让MyBatis Generator产生的代码支持分页
  2. JAVA基础:Hibernate外键关联与HQL语法
  3. enterprise architect复制到word中的标签怎么改变_7个 Word 技巧,不会别说自己会 Word...
  4. 2021年NBA季后赛第二轮晋级预测
  5. 基础总结篇之九:Intent应用详解
  6. 解决docker push镜像到docker hub报没有权限
  7. C++之vs2017导出动态库失败
  8. 收藏:常用的广告代码的表达式
  9. caffe的python接口学习(3):训练模型(training)
  10. SQL Server 默认跟踪应用4 -- 检测日志文件自动增长
  11. C语言从入门到精通(第一期之结构框架)
  12. IOI2009 Day2 B Mecho小熊
  13. android光照传感器,Android 传感器--光照传感器详解及使用
  14. 如何在linux下解压缩rar和zip格式的文件压缩包
  15. Linux-lsxxx
  16. 微信支付签约委托代扣文档 - 月付会员或者定期支付服务 - APP纯签约
  17. 计算机系统的存储器系统的任务是,第2章 计算机系统的组成.ppt
  18. 小白学 Python 爬虫(11):urllib 基础使用(一)
  19. 基于MATLAB金属表面缺陷分类与测量的GUI设计
  20. npm i element-ui -S命令错误 针对于vue2

热门文章

  1. linux配置指定ip访问指定端口号,操作系统linux和dos linux下通过iptables只允许指定ip地址访问指定端...
  2. 支持javascript的ppt软件_用 reveal.js 随心所欲地制作 PPT
  3. 2018中国客户体验创新大会在深圳召开
  4. 计算机层次结构与计算机硬件
  5. emc存储java打开后报错,EMC存储划分lun过程
  6. 那个让人生气 又不值得生气的事情
  7. Alfresco安装后启动异常处理
  8. 计算机科学增刊封面,计算机科学 增刊
  9. 27.CF1004F Sonya and Bitwise OR 区间合并线段树
  10. IPTV收官之战-----机顶盒浏览器内核获取及适配