mysql插入千万条随机数据
来源:互联网 发布:开淘宝前景怎么样 编辑:程序博客网 时间:2024/05/19 23:01
因为想测试sql在千万级数据下的优化,准备在自己的阿里云数据库插入一千万条数据,在网上搜了全是些乱七八糟的,于是就自己动手,同时也希望和大家分享,不足之处还请各位指教。
一、建表
1.创建部分表
create table dept(id int unsigned primary key auto_increment,deptno mediumint unsigned not null default 0,dname varchar(20) not null default"",loc varchar(13) NOT NULL Default "")engine=innodb default charset=utf8;
为了使插入数据为正数,我是用来unsigned关键字修饰,字段分别为编号,部分编号,部门名称,位置
2.创建员工表
create table emp(id int unsigned primary key auto_increment,empno mediumint unsigned not null default 0,ename varchar(20) not null default"",job varchar(9) NOT NULL default "",mgr mediumint unsigned not null default 0,hiredate date not null,sal decimal(7,2) not null,comm decimal(7,2) not null,deptno mediumint unsigned not null default 0)engine=innodb default charset=utf8;
员工表的各字段分别为编号,员工编号,员工姓名,工作,上级,雇佣时间,薪水,奖金,从属部门编号
二、开启二进制函数功能
我们的数据内容是随机的,所以要使用函数来产生随机的字符串和部门编号。mysql的二进制函数功能默认是关闭的,我们可以通过以下命令查询:
show variables like 'log_bin_trust_function_creators';+---------------------------------+-------+| Variable_name | Value |+---------------------------------+-------+| log_bin_trust_function_creators | OFF |+---------------------------------+-------+
然后通过 set global log_bin_trust_function_creators=1;
将二进制函数功能开启
我们再次查询,结果如下所示
show variables like 'log_bin_trust_function_creators';+---------------------------------+-------+| Variable_name | Value |+---------------------------------+-------+| log_bin_trust_function_creators | ON |+---------------------------------+-------+
这样二进制函数功能就正常开启了,这个功能是本次有效,不过没必要一直开启,接下来我们就可以开始编写我们的函数了。
三、编写随机函数
1.随机产生字符串
delimiter $$create function rand_string(n int) returns varchar(255)begindeclare chars_str varchar(100) default 'abcdefghijklmnopqrstuvwxyzABCDEFGHIGKLMNOPQRSTUVWXYZ';declare return_str varchar(255) default '';declare i int default 0;while i<n doset return_str =concat(return_str,substring(chars_str,floor(1+rand()*52),1));set i=i+1;end while;return return_str;end $$
在这里说明下,为了避免;就导致命令提交,我用delimiter将提交的结束符改成$$
2.随机产生部门编号
delimiter $$create function rand_num() returns int(5)begindeclare i int default 0;set i = floor(100+rand()*10);return i;end $$
四、创建存储过程
1.部门表插入存储过程
delimiter $$create procedure insert_dept(in start int(10),in max_num int(10))begindeclare i int default 0;set autocommit = 0;repeat set i=i+1;insert into dept (deptno,dname,loc) values((start+i),rand_string(10),rand_string(8));until i = max_numend repeat;commit;end $$
2.员工表存储过程
delimiter $$create procedure insert_emp(in start int(10),in max_num int(10))begindeclare i int default 0;set autocommit = 0;repeatset i=i+1;insert into emp(empno,ename,job,mgr,hiredate,sal,comm,deptno)values((start+i),rand_string(6),'salesman',0001,curdate(),2000,400,rand`这里写代码片`_num());until i = max_numend repeat;commit;end $$
五、调用储存过程
首先将提交符恢复为; delimiter ;
1.插入10条部门数据 call insert_dept(100,10);
2.插入员工数据
这里我先测试插入50万条数据 call insert_emp (100001,500000);
结果:Query OK, 0 rows affected (34.40 sec),用了34.4秒
再次从员工编号5000001开始插入10000000条数据,
call insert_emp (500001,10000000);
结果:Query OK, 0 rows affected (11 min 25.66 sec)
分析:随机数据的插入还是比较耗费性能的,耗时较长,通过比对两次插入员工表的时间可以看出,第二次插入每条的平均时间还小于第一次,以为两次都只进行了一次事务提交,所以平均下来,第二次插入的每条时间会比第一次少一点。好了,数据插入好之后,我们就可以开始我们的sql调优了
阅读全文
2 0
- mysql插入千万条随机数据
- MYSQL在15分钟插入千万条数据
- mySQL存储千万条数据
- Mysql快速插入千万条测试数据
- SQL SERVER 快速插入千万条数据
- mysql 插入大量数据 千万级别
- MySql 快速插入千万级大数据
- 插入千万级别的Mysql数据
- MySql 快速插入千万级大数据
- JDBC 批量插入Mysql 字段值采用随机字符 100万条数据
- mysql随机查询若干条数据
- 随机取mysql的N条数据
- Oracle,Mysql 随机获取N条数据
- mysql随机查询若干条数据
- mysql随机查询若干条数据
- mysql随机查询若干条数据
- mysql随机查询若干条数据
- MYSQL随机取出20条数据
- 坐标系之间的旋转平移变换与对应变换矩阵的关系
- 【面试题】剑指offer09--菲波那切数列中的变态青蛙问题
- spring 验证框架出现错误ValidationMessages not found排查
- SSM(spring,springMVC,mybatis)框架开发环境整合
- Ubuntu笔记
- mysql插入千万条随机数据
- The prefix "p" for attribute "p:myservice-ref" associated with an element type "bean" is not bound.
- 【VS开发】WaitForSingleObject 和 WaitForMultipleObjects函数 (让线程挂起等待事件)
- HTML5入门
- Android 图片加载框架Glide4.0源码完全解析(二)
- 全国路网数据、全国水系矢量 行政区划边界(省市区县)、行政地名 矢量数据
- 因为你,我愿意
- iOS NO scheme的解决方法
- OpenCV 图像处理 计算机视觉 深度学习 优秀博主推荐