首页 > 数据库 >【编程基础知识】mysql中的insert into ... on DUPLICATE key和replace into的性能对比

【编程基础知识】mysql中的insert into ... on DUPLICATE key和replace into的性能对比

时间:2024-09-12 12:52:59浏览次数:11  
标签:insert ... into UPDATE REPLACE INSERT DUPLICATE KEY INTO

一、概述

在MySQL中,INSERT INTO ... ON DUPLICATE KEY UPDATEREPLACE INTO 都是用来处理插入或更新数据的语句,但它们在性能和行为上有所不同。

二、REPLACE INTO

REPLACE INTO 语句在遇到唯一键或主键冲突时,会先删除旧记录,然后插入新记录。这意味着它会执行两次操作:删除(DELETE)和插入(INSERT)。这种操作在有大量数据和高并发的环境中可能会比较慢,因为它涉及到两次磁盘I/O操作。此外,REPLACE INTO 可能会导致自增主键的值增加,这在主从复制的环境中可能会引起问题,因为从库执行更新操作时不会导致自增主键值的增加,这可能会导致主从数据不一致。

三、INSERT INTO … ON DUPLICATE KEY UPDATE

另一方面,INSERT INTO ... ON DUPLICATE KEY UPDATE 语句在遇到唯一键或主键冲突时,只会更新现有记录的指定字段,而不会删除和重新插入记录。这通常比 REPLACE INTO 更有效率,因为它只涉及到一次更新操作,减少了磁盘I/O操作。此外,ON DUPLICATE KEY UPDATE 不会影响自增主键的值,这对于保持数据的一致性非常有用。

四、性能对比

1、在性能方面,INSERT INTO ... ON DUPLICATE KEY UPDATE 通常被认为比 REPLACE INTO 更优,尤其是在处理大型数据集和高并发环境时。这是因为它减少了对磁盘的操作次数,并且能够更好地维护数据的一致性。

2、当数据库表的内容数量较大时(如百万级),INSERT INTO ... ON DUPLICATE KEY UPDATE 的更新操作比 REPLACE INTO 更快,因为它对索引的维护成本较低。而 REPLACE INTO 在更新数据时要先删除旧的记录,然后插入新的记录,这个过程还要重新维护索引,所以速度较慢 。

3、因此,如果你追求效率并且需要保持数据一致性,推荐使用 INSERT INTO ... ON DUPLICATE KEY UPDATE。但是,具体的选择还需要根据实际的业务需求和数据模型来决定。

标签:insert,...,into,UPDATE,REPLACE,INSERT,DUPLICATE,KEY,INTO
From: https://blog.csdn.net/u010425839/article/details/142172301

相关文章

  • BUG: pymysql executemany不支持insert on duplicate key update
    pymysql的executemany()方法支持传入单个SQL和一个sequenceofrecords(sequenceormapping)来同时写入多条数据。例如:sql="insertintot(c1,c2)values(%s,%s)"args=[(1,2),(3,4)]cursor.executemany(sql,args)#Ifargsisalistortuple,%scanbeusedas......
  • SQL 高级语法 MERGE INTO
    根据与源表相联接的结果,对目标表进行插入、更新、删除等操作。例如,对目标表,如果源表存在的数据则更新,没有的则插入,就可以使用MEREG进行同步。基本语法MERGEINTOtarget_tableUSINGsource_tableONconditionWHENMATCHEDTHENXXXWHENNOTMATCHEDTHENXXX这里的Sour......
  • 震惊!!一男子用尽了各种方式都搜不到这个资源,于是他竟然将手伸向了......!?pyqt pyside
    震惊!!一男子用尽了各种方式都搜不到这个资源,于是他竟然将手伸向了......!?pyqtpyside随窗口自适应、可缩放、拖动QLabel需求场景实现功能和使用1.参数设置2.设置图片3.缩放4.拖动5.小惊喜(裁剪图片)完整使用案例1.使用QtDesigner设计一个简单界面2.引用制......
  • 因为不懂推测解码,被面试官鄙视了...
    我是丁师兄,专注于智能驾驶方向大模型落地,公众号:丁师兄大模型。大模型1v1学习,已帮助多名同学上岸国内外大厂前两天有个学员抱怨后天就要面试了,心里难免紧张。尽管他做了很多准备,但他还是担心面试官会问到像“大模型中的推测解码”这种复杂的技术问题。为了不在关键时刻掉链......
  • 评职称、经济补贴...盘点2024年各城市PMP证书福利汇总!
    PMP备考资料免费领取##近年来,企业与企业、城市与城市间的人才争夺变得更加激烈,各大城市均针对持有国际职业资格认证的人才出台了相关优惠政策,以鼓励重点行业领域用人单位优化海外引才聚才方式,目前已有多个城市针对项目管理及相关行业和认证出台了鼓励政策。先简单给大家总结一下:上......
  • select...for update 到底是加了行锁,还是表锁?
    原文:select...forupdate到底是加了行锁,还是表锁?前言select...forupdate在MySQL中,是一种悲观锁的用法,一般情况下,会锁住一行数据,但如果没有使用正确的话,也会把整张表锁住。1.要什么要用行锁?假如现在有这样一种业务场景:用户A给你转账了2000元,用户B给你转账了3000......
  • 【倒计时10天...IEEE出版】第五届大数据、人工智能与软件工程国际研讨会(ICBASE 2024,9
    第五届大数据、人工智能与软件工程国际研讨会(ICBASE2024)将于2024年09月20-22日在中国温州隆重举行。会议主要围绕大数据、人工智能与软件工程等研究领域展开讨论。会议旨在为从事大数据、人工智能与软件工程研究的专家学者、工程技术人员、技术研发人员提供一个共享科研......
  • MySQL数据库insert,delete,update,select语句
    MySQL数据库insert,delete,update,select语句是在做数据处理是的重要部分首先我们要先拥有一个表格,这里我建立了一个student表然后在这个表格中添加一些数据这里要使用insert的语句INSERTINTOstudent(NO,NAME,age)VALUES(1001,'张三',20);这里我创建到的表有三个属性......
  • 使用微信小程序-云开发时报错: Error: errCode: -401003 api parameter type error |
    错误Uncaught(inpromise)thirdScriptErrorerrCode:-401003apiparametertypeerror|errMsg:parameter.datashouldbeobjectinsteadofundefined;Error:errCode:-401003apiparametertypeerror|errMsg:parameter.datashouldbeobjectinsteadofundef......
  • INSERT ... ON DUPLICATE KEY UPDATE 问题记录
    起因:需要新增复制数据并更新原数据状态,故采用INSERT...ONDUPLICATEKEYUPDATE的方式来插入和更新数据问题:数据插入及更新异常环境:MySQL5.7.32数据表结构:点击查看代码CREATETABLE`example_table`(`col_a`varchar(255)NOTNULL,`col_b`varchar(255)NOTN......