导读

我们在向数据库里批量插入数据的时候,会遇到要将原有主键或者unique索引所在记录更新的情况,而如果没有主键或者unique索引冲突的时候,直接执行插入操作。

这种情况下,有三种方式执行:

直接

直接每条select, 判断, 然后insert,毫无疑问,这是最笨的方法了,不断的查询判断,有主键或索引冲突,执行update,否则执行insert. 数据量稍微大一点这种方式就不行了。

稍微高级一些的方式。

replace

这是mysql自身的一个语法,使用 replace 的时候。其语法为:

replace into tablename (f1, f2, f3) values(vf1, vf2, vf3),(vvf1, vvf2, vvf3)

这中语法会自动查询主键或索引冲突,如有冲突,他会先删除原有的数据记录,然后执行插入新的数据。

insert on duplicate key.

这也是一种方式,mysql的insert操作中也给了一种方式,语法如下:

INSERT INTO table (a,b,c) VALUES (1,2,3)ON DUPLICATE KEY UPDATE c=c+1;

在insert时判断是否已有主键或索引重复,如果有,一句update后面的表达式执行更新,否则,执行插入。

第一种方式不说了,replace和insert on duplicate key这两种方式,哪中效率更高一些呢,毕竟,我们的执行sql,追求的就是高效。

分析

在最终实践结果中,得到接过如下:
在数据库数据量很少的时候, 这两种方式都很快,无论是直接的插入还是有冲突时的更新,都不错,但在数据库表的内容数量比较大(如百万级)的时候,两种方式就不太一样了,

首先是直接的插入操作,两种的插入效率都略低, 比如直接向表里插入1000条数据(百万级的表(innodb引擎)),二者都差不多需要5,6甚至十几秒。究其原因,我的主机性能是一方面,但在向大数据表批量插入数据的时候,每次的插入都要维护索引的, 索引固然可以提高查询的效率,但在更新表尤其是大表的时候,索引就成了一个不得不考虑的问题了。

其次是更新表,这里的更新的时候是带主键值的(因为我是从另一个表获取数据再插入,要求主键不能变) 同样直接更新1000条数据, replace的操作要比insert on duplicate的操作低太多太多, 当insert瞬间完成(感觉)的时候,replace要7,8s, replace慢的原因我是知道的,在更新数据的时候,要先删除旧的,然后插入新的,在这个过程中,还要重新维护索引,所以速度慢,但为何insert on duplicate的更新却那么快呢。 在向老大请教后,终于知道,insert on duplicate 的更新操作虽然也会更新数据,但其对主键的索引却不会有改变,也就是说,insert on duplicate 更新对主键索引没有影响.因此对索引的维护成本就低了一些(如果更新的字段不包括主键,那就要另说了)。

题外话:

在向数据量大的表里批量插入更新数据的时候,随着插入的数量越来越多,会导致越来越慢,这种情况下,因为我们用的innodb表,可以开启事务, 每次批量执行一批数据更新后提交, 再重新开事务处理下批数据,这样会有效增加效率

还有说明一下: 当我们执行数据库的插入和更新操作很慢的时候,不仅仅是语句,主机性能也很重要, 比如内存和cpu, 如果是虚拟机要相应适当调整, 如果在各种优化了之后效率还是很低, 但cpu和内存的占用却不高,那么就很可能是磁盘的IO性能了,这也会导致数据的更新速度慢。

PS: 数据库菜鸟一个, 所知有限, 如有纰漏, 还请指教

Mysql replace 与 insert on duplicate效率分析相关推荐

  1. Mysql之浅析INSERT ON DUPLICATE

    前言 如果不特别指出,默认mysql版本为8.0 简介 往数据库中插入记录时,如果发生唯一索引值冲突,insert on duplicate允许进行进一步的crud操作.伪代码如下: insert r ...

  2. insert 语句_替换某字段中的特定字符串——MySQL REPLACE 与INSERT 函数详解

    MySQL提供了一个非常实用的字符串函数--REPLACE() 函数,它允许用新的字符串替换字段中的特定字符串,而不再需要自己写函数去替换,用起来非常的方便. REPLACE() 函数语法 需要注意的 ...

  3. “ INSERT IGNORE”与“ INSERT…ON DUPLICATE KEY UPDATE”

    在执行包含多行的INSERT语句时,我想跳过重复的条目,否则它们会导致失败. 经过研究后,我的选择似乎是使用以下任一方法: ON DUPLICATE KEY UPDATE ,这意味着要付出一定的代价进 ...

  4. mysql Insert on duplicate引发的死锁

    表 CREATE TABLE `test_dup` ( `id` int(11) NOT NULL AUTO_INCREMENT, `num` int(10) unsigned DEFAULT NUL ...

  5. MySQL replace into 的坑以及insert相关操作

    下面我们主要说一下在插入时候的几种情况: 1:insert ignore 2:replace into 3:ON DUPLICATE KEY UPDATE 关于insert ignore: 关于rep ...

  6. mysql replace into 语法_mysql Replace into与Insert update

    Replace into replace into 跟 insert 功能类似, 不同点在于:replace into 首先尝试插入数据到表中, 1. 如果发现表中已经有此行数据(根据主键或者唯一索引 ...

  7. MySQL replace into (insert into 的增强版)

    在使用SQL语句进行数据表插入insert操作时,如果表中定义了主键,插入具有相同主键的记录会报错:  Error Code: 1062. Duplicate entry 'XXXXX' for ke ...

  8. MySQL · 案例分析 · RDS MySQL线上实例insert慢常见原因分析

    概述 insert慢是经常被问到的问题,笔者尝试在本文中对这个问题做一个分类梳理,列举的线上例子会做简化,希望对读者有所启发. 注意:因为阿里云MySQL线上实例还是以RDS 5.6为主体,本文的分析 ...

  9. 线上阿里云mysql慢_MySQL · 案例分析 · RDS MySQL线上实例insert慢常见原因分析-阿里云开发者社区...

    概述 insert慢是经常被问到的问题,笔者尝试在本文中对这个问题做一个分类梳理,列举的线上例子会做简化,希望对读者有所启发. 注意:因为阿里云MySQL线上实例还是以RDS 5.6为主体,本文的分析 ...

  10. mysql replace 效率,MySQL replace实用场景 MySQL实现replace函数的几种实用场景

    想了解MySQL实现replace函数的几种实用场景的相关内容吗,_陈哈哈在本文为您仔细讲解MySQL replace实用场景的相关知识和一些Code实例,欢迎阅读和指正,我们先划重点:MySQL,r ...

最新文章

  1. 谷歌、阿里们的杀手锏:3大领域,10大深度学习CTR模型演化图谱(附论文)
  2. Java I/O不迷茫,一文为你导航!
  3. 外地买房,提取公积金
  4. Mocha BSM产品亮点——事件管理
  5. 深度学习中交叉熵_深度计算机视觉,用于检测高熵合金中的钽和铌碎片
  6. java 获取手机归属地_java 获取手机归属地
  7. mysql 查看集群状态_MySQL数据库集群正确配置步骤
  8. mwt是什么意思网络用语_网络用语奶茶婊是什么意思(奶茶婊具备的3个表现)...
  9. [2018.10.25 T3] 旅程
  10. Spring常用注解详解大全(建议收藏)
  11. java图片处理,文字自动换行
  12. matlab解薛定谔方程,定态薛定谔方程的MATLAB求解(一)
  13. RGB颜色过度,数值转颜色
  14. html如何设置table的宽度,HTML怎么设置table宽度
  15. 上java培训班有用吗?Java有必要上培训班吗?
  16. linux安装glib,glib源码安装使用方法
  17. 地理科学与计算机技术的关系,地理信息系统与地理学的关系
  18. eeglab脑电数据预处理:step by step
  19. StatsD与Graphite联合作战
  20. 百度SRE工程师提前批一面总结+为二面攒人品

热门文章

  1. 菜鸟涂鸦作品展_No.24
  2. iOS swift 建立桥接文件及更改位置
  3. HDU 6390 GuGuFishtion(莫比乌斯反演 + 欧拉函数性质 + 积性函数)题解
  4. P3373 线段树2(多重标记线段树)题解
  5. 介绍下Javascript原型和原型链的特点?
  6. sql中DistinctCount的用法
  7. 转:ffmpeg编码h264
  8. R语言自然语言处理:情感分析
  9. R_ggplot2地理信息可视化_史上最全(二)
  10. 内推| 阿里全球化分析师战队集结令