Mysql 生成100w条测试数据

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS PostgreSQL,集群系列 2核4GB
简介: https://nsimple.top/archives/mysql-create-million-data.html有时候我们需要对大数据进行测试,本地一般没有那么多数据,就需要我们自己生成一些。

https://nsimple.top/archives/mysql-create-million-data.html

有时候我们需要对大数据进行测试,本地一般没有那么多数据,就需要我们自己生成一些。下面会借助内存表的特点进行生成百万条测试数据。

创建一个临时内存表, 做数据插入的时候会比较快些

SQL

-- 创建一个临时内存表DROPTABLEIFEXISTS`vote_record_memory`;CREATETABLE`vote_record_memory`(`id`int(10)unsignedNOTNULLAUTO_INCREMENT,`user_id`varchar(20)NOTNULLDEFAULT'',`vote_num`int(10)unsignedNOTNULLDEFAULT'0',`group_id`int(10)unsignedNOTNULLDEFAULT'0',`status`tinyint(2)unsignedNOTNULLDEFAULT'1',`create_time`datetimeNOTNULLDEFAULT'0000-00-00 00:00:00',PRIMARYKEY(`id`),KEY`index_user_id`(`user_id`)USINGHASH)ENGINE=InnoDBAUTO_INCREMENT=1DEFAULTCHARSET=utf8;

-- 创建一个普通表,用作模拟大数据的测试用例

SQL

DROPTABLEIFEXISTS`vote_record`;CREATETABLE`vote_record`(`id`int(10)unsignedNOTNULLAUTO_INCREMENT,`user_id`varchar(20)NOTNULLDEFAULT''COMMENT'用户Id',`vote_num`int(10)unsignedNOTNULLDEFAULT'0'COMMENT'投票数',`group_id`int(10)unsignedNOTNULLDEFAULT'0'COMMENT'用户组id 0-未激活用户 1-普通用户 2-vip用户 3-管理员用户',`status`tinyint(2)unsignedNOTNULLDEFAULT'1'COMMENT'状态 1-正常 2-已删除',`create_time`int(10)unsignedNOTNULLDEFAULT'0000-00-00 00:00:00'COMMENT'创建时间',PRIMARYKEY(`id`),KEY`index_user_id`(`user_id`)USINGHASHCOMMENT'用户ID哈希索引')ENGINE=InnoDBDEFAULTCHARSET=utf8COMMENT='投票记录表';

为了数据的随机性和真实性,我们需要创建一个可生成长度为n的随机字符串的函数。

SQL

-- 创建生成长度为n的随机字符串的函数DELIMITER// -- 修改MySQL delimiter:'//'DROPFUNCTIONIFEXISTS`rand_string`//SETNAMES utf8//CREATEFUNCTION`rand_string`(nINT)RETURNSVARCHAR(255)CHARSET'utf8'BEGINDECLAREchar_strvarchar(100)DEFAULT'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789';DECLAREreturn_strvarchar(255)DEFAULT'';DECLAREiINTDEFAULT0;WHILEi

为了操作方便,我们再创建一个插入数据的存储过程

SQL

-- 创建插入数据的存储过程DROPPROCEDUREIFEXISTS`add_vote_record_memory`//CREATEPROCEDURE`add_vote_record_memory`(INnINT)BEGINDECLAREiINTDEFAULT1;DECLAREvote_numINTDEFAULT0;DECLAREgroup_idINTDEFAULT0;DECLAREstatusTINYINTDEFAULT1;WHILEi

开始执行存储过程,等待生成数据(10W条生成大约需要40分钟)

SQL

-- 调用存储过程 生成100W条数据CALLadd_vote_record_memory(1000000);

查询内存表已生成记录(为了下步测试,目前仅生成了105645条)

SQL

SELECTcount(*)FROM`vote_record_memory`;-- count(*)-- 105646

把数据从内存表插入到普通表中(10w条数据13s就插入完了)

SQL

INSERTINTOvote_recordSELECT*FROM`vote_record_memory`;

查询普通表已的生成记录

SQL

SELECTcount(*)FROM`vote_record`;-- count(*)-- 105646

如果一次性插入普通表太慢,可以分批插入,这就需要写个存储过程了:

SQL

-- 参数n是每次要插入的条数-- lastid是已导入的最大idCREATEPROCEDURE`copy_data_from_tmp`(INnINT)BEGINDECLARElastidINTDEFAULT0;SELECTMAX(id)INTOlastidFROM`vote_record`;INSERTINTO`vote_record`SELECT*FROM`vote_record_memory`whereid>lastidLIMITn;END

调用存储过程:

SQL

-- 调用存储过程 插入60w条CALLcopy_data_from_tmp(600000);

标签: mysql原创大数据

相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
6天前
|
SQL 前端开发 关系型数据库
全表数据核对 ,行数据核对,列数据核对,Mysql 8.0 实例(sample database classicmodels _No.3 )
全表数据核对 ,行数据核对,列数据核对,Mysql 8.0 实例(sample database classicmodels _No.3 )
17 0
全表数据核对 ,行数据核对,列数据核对,Mysql 8.0 实例(sample database classicmodels _No.3 )
|
11天前
|
关系型数据库 MySQL 数据库
mysql 里创建表并插入数据
【10月更文挑战第5天】
79 1
|
13天前
|
分布式计算 关系型数据库 MySQL
大数据-88 Spark 集群 案例学习 Spark Scala 案例 SuperWordCount 计算结果数据写入MySQL
大数据-88 Spark 集群 案例学习 Spark Scala 案例 SuperWordCount 计算结果数据写入MySQL
38 3
|
9天前
|
Java 关系型数据库 MySQL
自动化测试项目实战笔记(一):JDK、Tomcat、MySQL、Jpress环境安装和搭建
这篇文章是关于自动化测试项目实战笔记,涵盖了JDK、Tomcat、MySQL、Jpress环境的安装和搭建过程,以及测试用例和常见问题总结。
21 1
自动化测试项目实战笔记(一):JDK、Tomcat、MySQL、Jpress环境安装和搭建
|
5天前
|
存储 测试技术 数据库
数据驱动测试和关键词驱动测试的区别
数据驱动测试 数据驱动测试或 DDT 也被称为参数化测试。
|
14天前
|
SQL 分布式计算 Hadoop
Hadoop-14-Hive HQL学习与测试 表连接查询 HDFS数据导入导出等操作 逻辑运算 函数查询 全表查询 WHERE GROUP BY ORDER BY(一)
Hadoop-14-Hive HQL学习与测试 表连接查询 HDFS数据导入导出等操作 逻辑运算 函数查询 全表查询 WHERE GROUP BY ORDER BY(一)
24 4
|
12天前
|
SQL 消息中间件 大数据
大数据-159 Apache Kylin 构建Cube 准备和测试数据(一)
大数据-159 Apache Kylin 构建Cube 准备和测试数据(一)
30 1
|
12天前
|
SQL 大数据 Apache
大数据-159 Apache Kylin 构建Cube 准备和测试数据(二)
大数据-159 Apache Kylin 构建Cube 准备和测试数据(二)
43 1
|
14天前
|
SQL 分布式计算 关系型数据库
Hadoop-21 Sqoop 数据迁移工具 简介与环境配置 云服务器 ETL工具 MySQL与Hive数据互相迁移 导入导出
Hadoop-21 Sqoop 数据迁移工具 简介与环境配置 云服务器 ETL工具 MySQL与Hive数据互相迁移 导入导出
33 3
|
6天前
|
存储 关系型数据库 MySQL
面试官:MySQL一次到底插入多少条数据合适啊?
本文探讨了数据库插入操作的基础知识、批量插入的优势与挑战,以及如何确定合适的插入数据量。通过面试对话的形式,详细解析了单条插入与批量插入的区别,磁盘I/O、内存使用、事务大小和锁策略等关键因素。最后,结合MyBatis框架,提供了实际应用中的批量插入策略和优化建议。希望读者不仅能掌握技术细节,还能理解背后的原理,从而更好地优化数据库性能。