如何快速新增百万测试数据?

XXX的APP上线了,
现需要一百万个学员的信息进行压力测试,
那么数据从哪里来呢?
直接找开发帮忙?
可能会被他鄙视!
一条一条去insert?
嗯,算了下大概需要20年!
不用怕,Happy老师接下来教你一百种方法


高效创建100万数据!


下面是XXXAPP中的一个学生成绩表, 
如何快速新增百万测试数据?

表结构很简单,id是主键,自增长唯一标识一个学生,sName是柠檬班每个学生的昵称,phone是手机号码,还有一个让我们既爱又恨的分数字段score。 附建表SQL:

如何快速新增百万测试数据?


===================================================


第一种方法:运用EXCEL辅助新增


1:excel新增少量数据


新建一个excel文件,新增一行数据,分别为1、13000000001,s_1,80对应学生成绩表中各字段 首先我们约定一个规则,现在想创建百万具有差异化的数据。


也就说用户的id需要各不相同(这个交给数据库自增长控制),用户的手机号、用户名也各不相同,成绩则希望能够用随机整数保存。


运用excel数据单元格下拉功能新增数据到excel文件中 

如何快速新增百万测试数据?




现在我们找到一个非常简单又有效的方法来新增数据,并且各行数据间也保持了差异性,那是不是一直往下拖动就能得到100w我们想要的记录呢? 


答案是否定的,Excel2003版最大行数是65536行。


 Excel2007开始的版本最大行数是1048576行 ,另外大家也可以去集思广益,看是否有方法在Excel中快速按照规则填充数据,当然这个不在本贴讨论范围内!


下拉拖动能得到想要的数据,但是局限性也很明显,excel行数是是有限的,拖动也需要耗费时间,所以我们暂时拖动10000w条数据填充到excel表中。


 数据有了,怎么导入到数据库? Navicat for MySQL这个神器就提供这样的功能。


==================================================


2:Navicat For MySQL导入excel表中数据


打开Navicat For MySQL,连接上MySQL数据库,右键我们刚创建的tb_lemon_student_score表,选择导入向导,选择excel文件类型进行导入,具体步骤如下图所示: 
如何快速新增百万测试数据?


==================================================


3:INSERT … SELECT语法复制数据


现在我们打开表查看下数据,10000条数据已经导入成功: 
如何快速新增百万测试数据?

但是与我们要的100w数据还相差甚远,这里教大家一个非常好用的查询插入的SQL语句,语法如下: INSERT 表1(字段1,字段2,字段3…) SELECT 字段1,字段2,字段3… FROM 表2; 该语句可以将select语句中查询出结果集插入到表中 。


现在查询出当前tb_lemon_student_score表的所有记录数,


然后使用insert…select的语法达到复制数据的效果
如何快速新增百万测试数据?



执行上述语句,复制插入10000条数据成功 

如何快速新增百万测试数据?
查询,发现数据表中已经有20000的记录了 
如何快速新增百万测试数据?

循环使用执行上面的sql语句,就能够达到指数级插入数据的效果。


比如下一次执行,则2w记录将变成4w,再执行,则4w变成8w,以此类推,通过数次执行,数据表就有了百万级别的数据了:

如何快速新增百万测试数据?


==================================================


4:修改表数据保持差异性


为了保证数据的差异性,符合我们前面约定的规则:用户的id各不相同(这个交给数据库自增长控制),用户的手机号、用户名各不相同,成绩用随机整数保存,使用update语句对百万数据进行修改

如何快速新增百万测试数据?

最后,select抽查,数据已经符合我们的要求了 

如何快速新增百万测试数据?




=================================================