首页 / Mysql / MySQL如何快速的创建千万级测试数据

MySQL如何快速的创建千万级测试数据

备注: 此文章的数据量在100W,如果想要千万级,调大数量即可,但是不要大量使用rand() 或者uuid() 会导致性能下降

备注:

此文章的数据量在100W,如果想要千万级,调大数量即可,但是不要大量使用rand() 或者uuid() 会导致性能下降

背景

在进行查询操作的性能测试或者sql优化时,我们经常需要在线下环境构建大量的基础数据供我们测试,模拟线上的真实环境。

废话,总不能让我去线上去测试吧,会被DBA砍死的

创建测试数据的方式

    1. 编写代码,通过代码批量插库(本人使用过,步骤太繁琐,性能不高,不推荐)

    2. 编写存储过程和函数执行(本文实现方式1)

    3. 临时数据表方式执行 (本文实现方式2,强烈推荐该方式,非常简单,数据插入快速,100W,只需几秒)

    4. 一行一行手动插入,(WTF,去死吧)

创建基础表结构

不管用何种方式,我要插在那张表总要创建的吧

方式1: 采用存储过程和内存表

创建内存表

利用 MySQL 内存表插入速度快的特点,我们先利用函数和存储过程在内存表中生成数据,然后再从内存表插入普通表中

创建函数和存储过程

调用存储过程

出现内存已满时,修改 max_heap_table_size 参数的大小,我使用64M内存,插入了22W数据,看情况改,不过这个值不要太大,默认32M或者64M就好,生产环境不要乱尝试

从内存表插入普通表

方式2: 采用临时表

创建临时数据表tmp_table

用 python或者bash 生成 100w 记录的数据文件(python瞬间就会生成完)

python(推荐): python -c “for i in range(1, 1+1000000): print(i)” > base.txt
bash(不推荐,会比较慢): bash i=1; while [ $i -le 1000000 ]; do echo $i; let i+=1; done  > base.txt

导入数据到临时表tmp_table中

千万级数据 20秒插入完成

注意: 导入数据时有可能会报错,原因是mysql默认没有开secure_file_priv( 这个参数用来限制数据导入和导出操作的效果,例如执行LOAD DATA、SELECT … INTO OUTFILE语句和LOAD_FILE()函数。这些操作需要用户具有FILE权限。 )

解决办法:在mysql的配置文件中(my.ini 或者 my.conf)中添加 secure_file_priv = /Users/LJTjintao/temp/` ,  然后重启mysql 解决

MySQL如何快速的创建千万级测试数据

MySQL如何快速的创建千万级测试数据

以临时表为基础数据,插入数据到t_user中,100W数据插入需要10.37s

更新创建时间字段让插入的数据的创建时间更加随机

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对我是攻城狮的支持。

本文来自网络,不代表我是攻城狮立场,转载请注明出处:https://www.54gcs.cn/sql/mysql/5194.html

helwo作者

上一篇
下一篇

为您推荐

发表评论

联系我们

联系我们

在线咨询: QQ交谈

邮箱: web@5vo.cn

工作时间:周一至周五,9:00-17:30,节假日休息
关注微信
微信扫一扫关注我们

微信扫一扫关注我们

手机访问
手机扫一扫打开网站

手机扫一扫打开网站

返回顶部
跳至工具栏