注册 登录  
 加关注
查看详情
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

海鱼的博客-飞在空中的鱼

飞是一种梦想,也会是一种姿态

 
 
 

日志

 
 

Mysql批量更新  

2012-08-03 17:33:18|  分类: Mysql |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

最近有用到数据批量更新,使用原始的UPDATE语句发现性能较差,将网上看到的三种方式总结如下:

(1)批量update,一条记录update一次,性能很差

update test_tbl set dr='2' where id=1;
      (2)replace into 或者insert into ... on duplicate key update

replace into test_tbl (id,dr) values (1,'2'),(2,'3'),...(x,'y');

或者使用 insert into test_tbl (id,dr) values  (1,'2'),(2,'3'),...(x,'y') on duplicate key update dr=values(dr);

(3)创建临时表,先更新临时表,然后从临时表中更新

create temporary table tmp(id int(4) primary key,dr varchar(50));
       insert into tmp values  (0,'gone'), (1,'xx'),...(m,'yy');
       update test_tbl, tmp set test_tbl.dr=tmp.dr where test_tbl.id=tmp.id;

这种方法需要用户具有temporary表的create权限

下面是上述方法update 100000条数据的性能测试结果:
         逐条update
        real    0m15.557s
        user    0m1.684s
        sys    0m1.372s

       replace into
       real    0m1.394s
       user    0m0.060s
       sys    0m0.012s

       insert into on duplicate key update
       real    0m1.474s
       user    0m0.052s
       sys    0m0.008s

      create temporary table and update:
      real    0m0.643s
     user    0m0.064s
     sys    0m0.004s

就测试结果来看,测试当时使用replace into性能较好。
replace into  和insert into on duplicate key update的不同在于:
replace into 操作本质是对重复的记录先delete 后insert,如果更新的字段不全会将缺失的字段置为缺省值
insert into 则是只update重复记录,不会改变其它字段。





 

  评论这张
 
阅读(35)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2018