提升mysql大数据插入或者更新数据条目的执行效率

mysql 专栏收录该内容
16 篇文章 0 订阅

我在做项目的时候有这么个需求,我需要对每天产生的16000条数据进行批量的更新修改,

首先我们先在数据表里面查询新的数据条目是否已经在现有的表里存在,如果存在就执行update方法,如果不存在就直接执行insert方法

我的做法就是

for(循环16000条数据){

String sql = "select * from user where userid=? and uname=? and email=?";   查询是否已经存在

if(不存在){

sql = "insert into user..................."  //直接插入

} else{

sql = "update user    ,,,,,,,   wehre   userid = ? and uname = ? and emial = ?"  //更新

}

}

这样简单的几条操作,在我一段日子的测试中发现,大概要耗费2个半小时的时间才能执行完这个循环,中途还容易出现错误。

后来上网查询相关信息,来提升效率,终于找到一种可行性方法

采用mysql中的  insert into table(列名1,列名2,列名3 ...) values(值1,值2,值3,  ...) on publicate key update 列名1 = values(值1),列名2 = values(值2)...

讲解下这条语句

首先使用这个方法必须满足一个条件,就是你新要查询插入的这16000条数据,与你现有的表数据格式都是一样的,你本地数据表的主键完全与新的数据匹配

因为这个机制建立在数据表主键的基础上,这是它判断是否数据重复的重要依据。

然后讲下update 后面的语句的意思,update后面跟着的列名1 = values(值1),列名2 = values(值2)作用是你想要对那些列的值要进行更新,就将其以这种

组合的方式标记出来例如,userid = values(3),uname = values('xueqi') 这样子


写一条我的语句作为参考:

insert into USER(ID,NAME,PASS,EMAIL,STATUS,SEX,AGE) values(1,'xueqi','123','xeuqi@qq.com',0,1,29),(2,'xiaoli','4521','xiaoli@qq.com',0,1,23) on publicate key update

EMIAL = values(EMAIL),SEX = values(SEX),AGE = values(AGE)


  • 0
    点赞
  • 1
    评论
  • 1
    收藏
  • 打赏
    打赏
  • 扫一扫,分享海报

©️2022 CSDN 皮肤主题:撸撸猫 设计师:马嘣嘣 返回首页

打赏作者

xq30397022

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值