mysql批量更新优化_QQ群优化软件

mysql批量更新优化_QQ群优化软件前面介绍了MySQL批量插入可以通过存储过程的方式来实现,这里介绍批量插入100W记录,并做一个优化。建表语句:create_table.sqldroptableifexistsxx_user;createtablexx_user(idintprimarykeyauto_increment,namevarchar(20),ageint);直接插入:pr…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE稳定放心使用

前面介绍了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条记录,耗时如下:

mysql批量更新优化_QQ群优化软件

这种循环单条记录插入的方式建议不要直接操作,非常耗时。 

多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秒:

 mysql批量更新优化_QQ群优化软件

优化参数:

set global bulk_insert_buffer_size=104857600;
set session autocommit=off;
set session unique_checks=off; 

当使用以上优化之后,第一个循环插入单条记录的办法,速度提升的惊人,效果如下,时间接近60秒:

mysql批量更新优化_QQ群优化软件

当我们利用优化后的环境进行多values批量插入测试,发现速度并没有明显的改变。如下所示:

mysql批量更新优化_QQ群优化软件

这个速度接近于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.net/185459.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 利用nginx搭建RTMP视频点播、直播、HLS服务器

    利用nginx搭建RTMP视频点播、直播、HLS服务器开发环境Ubuntu14.04servernginx-1.8.1nginx-rtmp-modulenginx的服务器的搭建安装nginx的依赖库sudoapt-getupdatesudoapt-getinstalllibpcre3libpcre3-devsudoapt-getinstallopenssllibssl-dev配置并编译nginx使用nginx的默

    2022年6月13日
    38
  • 只读挂载磁盘linux,linux挂载磁盘就变只读怎么解决

    只读挂载磁盘linux,linux挂载磁盘就变只读怎么解决Linux系统挂载存储变成只读的解决方案:1、mount:用于查看哪个模块输入只读,一般显示为:[root@localhost~]#mount/dev/cciss/c0d0p2on/typeext3(rw)procon/proctypeproc(rw)sysfson/systypesysfs(rw)devptson/dev/ptstypedevpts(r…

    2022年6月19日
    20
  • c++ map是有序还是无序的_实现有序map之go「建议收藏」

    c++ map是有序还是无序的_实现有序map之go「建议收藏」GoMap介绍Go中Map是一种无序的键值对的集合。Map最重要的一点是通过key来快速检索数据,key类似于索引,指向数据的值。Map是一种集合,所以我们可以像迭代数组和切片那样迭代它。不过,Map是无序的,我们无法决定它的返回顺序,这是因为Map是使用链式hash表来实现的。c++中的实现在C++STL中map采用红黑树实现,可以实现有序的Map.Go中实现实现原理这个实现方法的…

    2022年9月23日
    0
  • cts测试环境搭建(任务调度框架有哪些)

    1.命令执行经过了前面对于命令的调度,开启真正命令的执行,在TestInvocation中把configuration中的所有组件都取出来执行。入口:TestInvocation.invokepublicvoidinvoke(IInvocationContextcontext,IConfigurationconfig,IReschedulerrescheduler

    2022年4月10日
    34
  • web前端常见面试题总结

    web前端常见面试题总结人生的路上少不了尝试,人人都是打工人,但愿这份面试题可以帮助到你H5有哪些新特性?绘画canvas(随时随地绘制2D图形)、svg(描述XML中的2D图形)元素语义化标签header、ment、content、footer…新增的input类型和属性音频,视频H5地理定位H5拖放H5WebStorage存储H5应用程序缓存H5中的WebworkersH5服务器发送事件(server-sentevent)允许网页获得来自服务器的更新WebSocket在单个TCP连接上进

    2022年9月15日
    0
  • JAVA中全局变量

    java中的全局变量是由public修饰的static成员变量,形如publicstaticintID;java中的全局变量是放在静态方法区中的,所有的实例对象会共享同一份全局变量。所以一旦对某个类实例化后对其中的全局变量做出修改,那么其他的实例其中的全局变量值也相应的会被修改。定义了一个测试类如下:packageTEST;publicclassClassTest{ pu…

    2022年4月5日
    76

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号