mysql大批量数据写入_存储过程写入大批量数据,用于测试mysql查询优化

---恢复内容开始---

最近仔细研究了一下mysql优化索引的知识,当然开始玩之前还是要插入大量数据的

下面是表结构

Ps:这个插入是我看韩老师的mysq优化章节

1 #创建表EMP雇员2 CREATE TABLE emp3 (empno MEDIUMINT UNSIGNED NOT NULL DEFAULT 0,/*编号*/

4 ename VARCHAR(20) NOT NULL DEFAULT "",/*名字*/

5 job VARCHAR(9) NOT NULL DEFAULT "",/*工作*/

6 mgr MEDIUMINT UNSIGNED NOT NULL DEFAULT 0,/*上级编号*/

7 hiredate DATE NOT NULL,/*入职时间*/

8 sal DECIMAL(7,2) NOT NULL,/*薪水*/

9 comm DECIMAL(7,2),/*红利*/

10 deptno MEDIUMINT UNSIGNED NOT NULL DEFAULT 0/*部门编号*/

11 )ENGINE=MyISAM DEFAULT CHARSET=utf8;

然后我们创建存储过程

先:delimiter $$

先创建随机部门号函数

#这里我们有自定了一个函数,返回一个随机部门号create functionrand_num()returns int(5)begin

declare i int default 0;set i = floor(10+rand()*500);returni;end $$

然后我们创建存储函数

#随机添加雇员 max_num条,雇员编号从 start

#start是雇员编号开始,max_num准备添加多少雇员create procedure inset_emp(in start int(10),in max_num int(10))begin

declare i int default 0;

#set autocommit=0把autocommit设置成0 含义:不要自动提交set autocommit = 0;

repeatset i = i + 1;

#通过前面写的函数随机产生字符串和部门编号,然后加入带emp表insert into emp values ((start+i),rand_string(6),'SALESMAN',0001,curdate(),2000,400,rand_num());

until i=max_numendrepeat;

#commit整体提交所有spl语句,提高效率commit;end$$

最后执行inset_emp插入数据

call inset_emp(100001,8000000)$$

最后等待执行完毕。一般时间和机器配置有关,我是用的windows i3cpu 4分钟。

最后我们试一下查询速度。

【这里我之前生成数据的时候,价格id主键,就不删除id了,咱们直接查询ename】

a6a594cf5056dcc9874ce4e8c6e96d4b.png

然后我们执行随机查询

472e329993cb9b21eb19cca7fa928b06.png

发现时间都是很久,然后我们为字段ename添加索引

4a3b5191d4244612bac0dc6379599c97.png

这个执行可能需要几分钟时间,因为他要在数据根目录创建一个索引文件

810a425b05e83ac34397127ec724e9b7.png

MYI结尾文件是MYD结尾文件大小的约三分之一。

2f1e324225cc7c932277cb36dce519e6.png

添加完成后,我们再执一次此查询。

a40852ac3b0db3635f4e392107aa2aed.png

可以看出,速度提升了很多很多。

ps:删除索引的命令是 ceshi_name是索引名,emp是表明。

c942e70f7588359a6700533ad182b9c8.png

删除成功后再执行一次查询。

41fec23047cbfdabcef53ab784acdd9b.png

可以看到有慢了许多。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值