Mysql快速插入千万条数据的实战教程

吾爱主题 阅读:158 2024-04-02 08:00:21 评论:0

一.创建数据库

二.创建表

1.创建 dept表

?
1 2 3 4 5 6 7 create table `dept` (   `id` int (11) not null ,   `deptno` mediumint(9) default null ,   `dname` varchar (20) default null ,   `loc` varchar (13) default null ,   primary key (`id`) ) engine=innodb default charset=utf8;

2.创建emp表

?
1 2 3 4 5 6 7 8 9 10 11 12 create table `emp` (   `id` int (11) not null ,   `empon` mediumint(9) default null comment '编号' ,   `ename` varchar (20) default null ,   `job` varchar (9) default null ,   `mgr` mediumint(9) default null comment '上级编号' ,   `hirdate` datetime default null comment '入职时间' ,   `sal` decimal (7,2) default null comment '薪水' ,   `comm` decimal (7,2) default null comment '红利' ,   `deptno` mediumint(9) default null comment '部门编号' ,   primary key (`id`) ) engine=innodb default charset=utf8;

三.设置参数

show variables like 'log_bin_trust_function_creators';

默认关闭.  需要设置为1。因为表中设置 mediumint 字段 创建函数可能会报错

set global log_bin_trust_function_creators=1;

四.创建函数

1.随机产生字符串

?
1 2 3 4 5 6 7 8 9 10 11 12 delimiter $ create function rand_str(n int ) returns varchar (255) begin   declare chars_str varchar (100) default 'abcdefghijklmnopqrstuvwsyzabcdefghijklmnopqrstuvwxyz' ;       declare return_str varchar (255) default '' ;   declare i int default 0;       while i< n do       set return_str =coucat(return_str, substring (chars_str,floor(1+rand()*52),1));       set i= i+1;   end while;       return return_str; end $

2.随机产生部门编号

?
1 2 3 4 5 6 7 delimiter $ create function rand_num() returns int (5) begin   declare i int default 0;       set i= floor(100+rand()*10);       return i; end $

五.创建存储过程

1. emp表存储过程

?
1 2 3 4 5 6 7 8 9 10 11 12 delimiter $ create procedure insert_emp( in start int (10), in max_num int (10)) begin    declare i int default 0;          set autocommit = 0;          repeat #重复          set i = i + 1;          insert into emp(empon,ename,job,mgr,hiredate,sal,comm,depton) values ((start+i),rand_str(6), 'salesman' ,0001,curdate(),2000,400,rand_num());       until i = max_num   end repeat;       commit ; end $

2.dept表存储过程

?
1 2 3 4 5 6 7 8 9 10 11 12 delimiter $ create procedure insert_dept( in start int (10), in max_num int (10)) begin    declare i int default 0;          set autocommit = 0;          repeat #重复          set i = i + 1;          insert into dept(deptno,dname,loc) values ((start+i),rand_str(10),rand_str(8));       until i = max_num   end repeat;       commit ; end $

六.执行

1.先执行十条

这个错误是一个小坑 发现了吗 我之前留下的  根据提示 去排查吧 

执行成功!

2.查看数据

重头戏来喽!  一次性干他百万条数据  赌一把 看看会不会玩崩了

3.执行百万插入

call insert_dept(10001,1000000);

400s跑百万数据  一秒2500条    我这配置太垃圾  以前测试的是一秒一万 最好50w跑一次

欧克 睡觉 

总结

到此这篇关于mysql快速插入千万条数据的文章就介绍到这了,更多相关mysql插入千万条数据内容请搜索服务器之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持服务器之家!

原文链接:https://blog.csdn.net/LiuY521/article/details/114273793

可以去百度分享获取分享代码输入这里。
声明

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

【腾讯云】云服务器产品特惠热卖中
搜索
标签列表
    关注我们

    了解等多精彩内容