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插入,均没有明显的提升效率,所以这里并没有特别的介绍。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/185459.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • ajax跨域问题以及解决方案_js跨域请求的三种方法

    ajax跨域问题以及解决方案_js跨域请求的三种方法出于浏览器的同源策略限制。同源策略(Sameoriginpolicy)是一种约定,它是浏览器最核心也最基本的安全功能,如果缺少了同源策略,则浏览器的正常功能可能都会受到影响。可以说Web是构建在同源策略基础之上的,浏览器只是针对同源策略的一种实现。同源策略会阻止一个域的javascript脚本和另外一个域的内容进行交互。所谓同源(即指在同一个域)就是两个页面具有相同的协议(protocol),主机(host)和端口号(port)AJAX跨域请求下面简单模拟一个场景—–>>前端有.

  • 程序员,在北上广深杭赚够100万,就逃回二三四线城市生活,靠谱吗?

    程序员,在北上广深杭赚够100万,就逃回二三四线城市生活,靠谱吗?无意间刷到一个话题,北漂程序员,赚够100万,然后回三四线城市享受生活,不确定这个想法靠不靠谱。讲真,我觉得我在这个话题上还是挺有话语权的。就来给大家唠唠,看能不能提供一丢丢参考价值。我没有在北京搬砖过,但在苏州搬砖过,苏州和北上广深杭比起来,肯定有差距,但不得不承认,苏州的发展速度确实是有目共睹的。目前已经在三线城市洛阳生活了多年,生活品质不能说有多高,但生活的基础条件我觉得都还过得去。尤其是其中很重要的一点,教育资源是能跟得上的。01、十分怀念那苏州说实话,还是挺怀念苏州那段时光的。苏州不

  • Windows内核编程(二)-第一个内核程序

    Windows内核编程(二)-第一个内核程序第一个内核程序通过VisualStudio新建工程注意事项:大部分widnows驱动程序都是内核驱动(KernelDriver),所以本笔记不分”驱动程序”与”内核编程”,也不区分”内核模块”(KernelModule)、“驱动程序”(Driver)与”内核程序”,这些词汇统一指编译出的扩展名为”.sys”的可执行文件(并非强制扩展名为.sys),也不区分”应用层”与”用户态”。驱动分类:NT驱动最简单的驱动模型,不支持硬件特性WDM驱动在NT驱动的基础上引入的一套驱动模型,支持即

  • disruptor (史上最全)[通俗易懂]

    disruptor (史上最全)[通俗易懂]文章很长,而且持续更新,建议收藏起来,慢慢读!疯狂创客圈总目录语雀版|总目录码云版|总目录博客园版为您奉上珍贵的学习资源:免费赠送:《尼恩Java面试宝典》持续更新+史上最全+

  • 2268大约是多少_情态动词过去式

    2268大约是多少_情态动词过去式小 Q 在电子工艺实习课上学习焊接电路板。一块电路板由若干个元件组成,我们不妨称之为节点,并将其用数字 1,2,3… 进行标号。电路板的各个节点由若干不相交的导线相连接,且对于电路板的任何两个节点,都存在且仅存在一条通路(通路指连接两个元件的导线序列)。在电路板上存在一个特殊的元件称为“激发器”。当激发器工作后,产生一个激励电流,通过导线传向每一个它所连接的节点。而中间节点接收到激励电流后,得到信息,并将该激励电流传向与它连接并且尚未接收到激励电流的节点。最终,激励电流将到达一些“终止节点”——

  • 通俗易懂的Mybatis工作原理[通俗易懂]

    作为半自动的ORM框架,Mybatis被越来越多的企业接受。搞清楚它的工作原理以及底层实现,对于开发者可事半功倍。很多文章都是使用大批量的源码流程去分析原理。对于有源码阅读功底的开发者,也许还能招架住,但还是不直观。我以前的很多文章都是这么做的,后来有朋友私信建议说,这些文章类似于个人笔记,只能自己阅读,不利于分享,所以,本文将尝试采用通俗易懂的白话文带领大家认识一下Mybatis的工作原理。(PS:大家可以设想,如果自己在开发Mybatis,该如何设计好Mybatis的功能呢?)一...

发表回复

您的电子邮箱地址不会被公开。

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