提升mysql大数据插入或者更新数据条目的执行效率
2017-03-15 10:04
393 查看
我在做项目的时候有这么个需求,我需要对每天产生的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)
首先我们先在数据表里面查询新的数据条目是否已经在现有的表里存在,如果存在就执行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)
相关文章推荐
- mysql 插入更新多条数据的效率问题
- php+mysqli实现批量执行插入、更新及删除数据的方法
- .net中利用oracle产品自带的数据访问组件(Oracle.DataAccess.dll)提升批量更新操作的执行效率
- 关于ssh javaweb 项目插入或者更新数据后 mysql 数据乱码的问题
- .net中利用oracle产品自带的数据访问组件(Oracle.DataAccess.dll)提升批量更新操作的执行效率
- Asp.Net 2.0 操作mysql 数据基类(读取,删除,插入,更新)
- 如何提高Oracle存储过程批量插入或者更新数据的性能
- mySQL 教程 第5章 插入 更新与删除数据
- python对MySQL进行数据的插入、更新和删除之后需要commit,数据库才会真的有数据操作。(待日后更新)
- MySQL的一些基本语法(8)-插入更新和删除数据
- MYSQL 无重复插入数据更新语法
- 怎样往mysql中导数据执行效率高
- Asp.Net 2.0 操作mysql 数据基类(读取,删除,插入,更新)
- 提升SQLite数据插入效率低、速度慢的方法
- mysql如果数据不存在,则插入新数据,否则更新的实现方法
- mysql如果有数据就更新,没有数据就插入的方法
- C#:30行数据插入到数据库中的效率测试-一行行执行、构造SQL一次执行、SqlBulkCopy
- 关于redo(二)插入更新数据时的效率比较
- 如何从一个表的数据更新到另外一个表的列或者插入
- mysql学习总结一当数据不存在的时候插入,存在的时候进行更新,删除重复数据