mysql批量更新优化_QQ群优化软件
前面介绍了MySQL批量插入可以通过存储过程的方式来实现,这里介绍批量插入100W记录,并做一个优化。
建表语句:create_table.sql
drop table if exists xx_user;
create table xx_user(
id int primary key auto_increment,
name varchar(20),
age int);
直接插入:proc.sql
delimiter //
drop procedure if exists add_user;
create procedure add_user()
begin
declare i int default 0;
set i=0;
while i<=1000000 do
set i=i+1;
insert into xx_user(name,age) values (concat('user-',i),20);
end while;
end;
//
delimiter ;
默认情况下,直接调用生成的存储过程,批量插入100w条记录,耗时如下:
这种循环单条记录插入的方式建议不要直接操作,非常耗时。
多values插入:batch.sql
drop procedure if exists batch_insert;
delimiter //
create procedure batch_insert()
begin
declare i int;
set i = 0;
set @sqlstr='insert into xx_user(name,age) values ';
while i<=1000000 do
set i=i+1;
set @sqlstr=concat(@sqlstr,'(concat(''user-'',',i,'),18)');
if mod(i,5000)=0 then
prepare stmt from @sqlstr;
execute stmt;
deallocate prepare stmt;
set @sqlstr='insert into xx_user(name,age) values ';
else
set @sqlstr=concat(@sqlstr,',');
end if;
end while;
end;
//
delimiter ;
这个是利用了多个values批量插入的办法,速度明显要高于第一种循环单条记录插入的办法,如下图所示,时间缩短到接近90秒:
优化参数:
set global bulk_insert_buffer_size=104857600; set session autocommit=off; set session unique_checks=off;
当使用以上优化之后,第一个循环插入单条记录的办法,速度提升的惊人,效果如下,时间接近60秒:
当我们利用优化后的环境进行多values批量插入测试,发现速度并没有明显的改变。如下所示:
这个速度接近于90秒,和不做参数修改时差不多。
以上两个插入对比,如果不修改参数的情况下,多values批量插入的办法比普通循环插入的效率要高很多,如果更改了环境变量参数,那么普通循环插入单条记录的效率提升非常快,甚至超过了多values批量插入的效率。
一般而言,如果修改了autocommit,unique_checks为off,那么需要在批量插入之后,将变量值修改回来。比如:
set session autocommit=on; set session unique_checks=on;
根据很多建议修改bulk_insert_buffer_size大小,默认是8m即8388608,修改为100m,即104857600,无论是循环插入单条记录,还是多values插入,均没有明显的提升效率,所以这里并没有特别的介绍。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/185459.html原文链接:https://javaforall.cn
相关文章
- MySQL使用问题_mysql的使用
- 利用MySQL批量导入工具加快数据库管理效率(mysql批量导入工具)
- 表快速完成 MySQL 表的批量修改(批量修改mysql)
- Linux下MySQL数据备份实践(linux下mysql备份)
- MySQL批量建表:一键搞定(mysql批量建表)
- MySQL批量修改:高效强大改变表结构(mysql批量修改)
- 优化MySQL性能:研究更好的线程管理(mysql线程优化)
- MySQL中快速批量更新数据的方法(mysql批量更新数据)
- MySQL批量插入数据一次搞定,提升数据处理效率(mysql数据批量插入)
- MySQL批量更新:一步到位(mysql的批量更新)
- 如何使用Eclipse连接MySQL数据库(eclipse如何连接mysql数据库)
- 一步到位:MySQL批量更新操作简介(mysql批量更新语句)
- MySQL中批量添加数据的简单方法(mysql如何批量添加数据)
- MySQL快速批量操作:速成必备(mysql批量操作)
- 快速掌握常用Mysql语句,让你的MySQL更强大(常用mysql语句)
- MySQL批量插入C语言实现(c mysql批量插入)
- MySQL 批量入库用C语言实现(c mysql 批量入库)
- 使用MySQL实现批量修改的简易操作(c mysql 批量修改)
- 1449号异常MySQL数据库连接异常(1449异常 mysql)
- 解析MySQL分组函数轻松掌握分组用法(mysql中分组使用)
- Mysql 数据库丢失别慌来了解一下 MySQL 不见的可能原因及解决办法(mysql不见)
- MySQL不支持批量操作,开发者需要注意哪些细节(mysql不支持批量)