MySQL制作具有千万条测试数据的测试库
有时候需要制造一些测试的数据,以mysql官方给的测试库为基础,插入十万,百万或者千万条数据。利用一些函数和存储过程来完成。
官方给的测试库地址:https://github.com/datacharmer/test_db
导入官方的数据库,做了一些简化,留下了部门表,员工表和雇佣表三张表,去掉了外键关联。因为是测试数据,日期的对应关系不具备准确性。
必要的函数
生成随机字符串
RAND():生成0~1之间的随机数
FLOOR:向下整数 (FlOOR(1.2)=1)
CEILING 向上取整 (CEILING(1.2)=2)
substring:截取字符串
concat:字符串连接
CREATE DEFINER=`root`@`localhost` FUNCTION `rand_string`(n INT) RETURNS varchar(255) CHARSET latin1
BEGIN
DECLARE chars_str varchar(100) DEFAULT 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz';
DECLARE return_str varchar(255) DEFAULT '';
DECLARE i INT DEFAULT 0;
WHILE i < n DO
SET return_str = concat(return_str,substring(chars_str , FLOOR(1 + RAND()*62 ),1));
SET i = i +1;
END WHILE;
RETURN return_str;
END
查看自定义的所有函数
show function status
测试使用:
select rand_string(5);
生成随机年月日字符串
生成一个指定时间段内的随机日期
SELECT
date(
from_unixtime( unix_timestamp( '2000-01-01' ) + floor( rand() * ( unix_timestamp( '2020-12-31' ) - unix_timestamp( '2000-01-01' ) + 1 ) ) ));
函数:生成指定时间段内的随机日期
CREATE DEFINER=`root`@`localhost` FUNCTION `rand_date_string`(startDate varchar(255),endDate varchar(255)) RETURNS varchar(255) CHARSET latin1
BEGIN
DECLARE return_str varchar(255) DEFAULT '';
SET return_str =date(
from_unixtime( unix_timestamp( startDate )
+ floor( rand() * ( unix_timestamp( endDate ) - unix_timestamp( startDate ) + 1 ) )
)
);
RETURN return_str;
END
测试使用:
select rand_date_string('2000-01-01','2020-12-31');
//结果
2001-09-10
存储过程生成数据
给每个部门插入一百万员工,那么员工表就有九百万的数据。
CREATE DEFINER=`root`@`localhost` PROCEDURE `data`()
BEGIN
DECLARE i INT DEFAULT 1;
DECLARE j INT DEFAULT 0;
DECLARE id INT DEFAULT 0;
WHILE i < 10 DO
WHILE j < 1000000 DO
insert into employees_m (emp_no,birth_date,first_name,last_name,gender,hire_date) VALUES(
id,rand_date_string('1970-01-01','1997-01-01'),rand_string(5),rand_string(5),'M',NOW());
insert into dept_emp_m (emp_no,dept_no,from_date,to_date) values(
id,concat('d00',i),rand_date_string('1990-01-01','2020-12-31'),'2020-12-31');
SET j=j+1;
SET id=id+1;
END WHILE;
SET j = 0;
SET i=i+1;
END WHILE;
END
插入九百万条数据大概用时:4868s
上面的方式插入数据会很慢,可以将数据插入到内存表,就是将表的存储引擎修改为MEMORY这样就会使用内存去存储数据,会比直接插入到INNODB引擎的表中快很多,只不过就是没有持久化,但是速度贼快,插入一千万条数据大概需要时间: 1227.89s
附录
修改表存储引擎
ALTER TABLE dept_emp_m ENGINE=MEMORY;
调整内存表的大小,修改配置文件
[mysqld]
max_heap_table_size = 2048M
tmp_table_size = 2048M
MySQL制作具有千万条测试数据的测试库的更多相关文章
- mysql插入二千万的测试数据进行测试,int和datetime比较
时间存储用int和datetime哪个字段更合适,建立下面的两个表 测试环境是内存2个G,一核的虚拟机 CREATE TABLE `test_inttime` ( `id` int(11) NOT N ...
- 记录一次mysql导入千万条测试数据过慢的问题!
数据库在没有做任何优化的情况下,使用存储过程,插入1千万条测试数据. CREATE PROCEDURE addmaxdata(IN n int) BEGIN DECLARE i INT DEFAULT ...
- MySQL快速生成100W条测试数据
https://blog.csdn.net/qq_16946803/article/details/81870174 1.生成思路利用mysql内存表插入速度快的特点,先利用函数和存储过程在内存表中生 ...
- 教你如何6秒钟往MySQL插入100万条数据!然后删库跑路!
教你如何6秒钟往MySQL插入100万条数据!然后删库跑路! 由于我用的mysql 8版本,所以增加了Timezone,然后就可以了 前提是要自己建好库和表. 数据库test, 表user, 三个字段 ...
- python+mysql:实现一千万条数据插入数据库
作业要求 构建一个关系模式和课本中的关系movies(title,year,length,movietype,studioname,producerC)一样的关系,名称自定,在这个关系中插入1000万 ...
- (2.4)Mysql之SQL基础——下载与使用测试库
(2.4)SQL基础——下载与使用测试库 1.查看与下载测试数据库 2.查看安装向导视图 3.安装 [1]安装:解压后用 mysql 命令安装(记得加上set autocommit=1) [2]核验: ...
- MySQL批量插入多条数据方便测试
批量插入流程 数据库字段 delimiter create procedure doinsert3() begin declare i int; declare j int; ; ; ) do ins ...
- mysql 快速生成百万条测试数据
1.生成思路 利用mysql内存表插入速度快的特点,先利用函数和存储过程在内存表中生成数据,然后再从内存表插入普通表中 2.创建内存表及普通表 CREATE TABLE `vote_record_me ...
- Oracle中插入千万条测试数据
测试需求,id.姓名.邮箱.手机号不可重复 1.创建序列 create sequence id_sequence; //创建序列id_sequence 2.创建表 create table USERI ...
随机推荐
- 一起学Vue:访问API(axios)
目标 使用Vue+ElementUI+axios构建一个非常简单CRUD应用程序,以便您更好地了解它的工作方式. 什么是 axios? Axios 是一个基于 promise 的 HTTP 库,可以用 ...
- NB-IOT覆盖能力有多强 是怎么实现的
NB-IoT技术中出现以来就以其强大的覆盖能力和通信距离长而受到广大使用者的欢迎,那么NB-IoT覆盖能力究竟是有多大,其覆盖能力应该怎么来衡量? 强大的覆盖能力是NB-IoT技术的最大特点之一,不仅 ...
- 【HNOI】分数分解
题意描述 近来 IOI 专家们正在进行一项有关整数方程的研究,研究涉及到整数方程解集的统计问题,问题是这样的. 对任意的正整数 \(n\),我们有整数方程: \[\frac{1}{x_1}+\frac ...
- P6064 [USACO05JAN]Naptime G
最近做了多少道 usaco 了,连 FJ 都认识我了呀 题意描述 传送门 给你 \(N\) 段时间其中 \(B\) 段时间你要用来睡眠,再给你每个时间睡眠可获得的效用值 \(U_i\). 可惜的是你每 ...
- 微信小程序授权页面
这里也是比较简单的 直接复制粘贴就可以用,可能图片位置不对.. <template> <view id="imporwer"> <image src= ...
- MySQL全面瓦解6:查询的基本操作
概述 提到查询,就回到我们第四篇的SQL语言分类了,DQL(Data QueryLanguage),也就是数据查询语言,实际就是从数据库中获取数据的一种命令方式.我们给数据库发送一个查询语句的命令,数 ...
- 【SpringBoot】13. logback日志记录
logback日志记录 Spring Boot 1.5.19.RELEASE 1.导入相关jar包 在spring-boot-starter-web 中已经包含 2.添加logback.xml配置文件 ...
- Android Activity启动黑/白屏原因与解决方式
Android Activity启动黑/白屏原因与解决方式 我们新建一个HelloWorld项目,运行在手机上时,Activity打开之前会有一个动画,而这个动画里是全白或者全黑的(取决于你的主题是亮 ...
- 这个Map你肯定不知道,毕竟存在感确实太低了。
这是why哥的第 75 篇原创文章 从Dubbo的优雅停机说起 好吧,其实本文并不是讲 Dubbo 的优雅停机的. 只是我在 Dubbo 停机方法 DubboShutdownHook 类中,看到了这样 ...
- 手写@koa/router源码
上一篇文章我们讲了Koa的基本架构,可以看到Koa的基本架构只有中间件内核,并没有其他功能,路由功能也没有.要实现路由功能我们必须引入第三方中间件,本文要讲的路由中间件是@koa/router,这个中 ...