当前位置: 首页 > news >正文

ON DUPLICATE KEY UPDATE 更底层解释它的优势

从更底层来看,ON DUPLICATE KEY UPDATE 的优势主要源于以下几个方面:

1. 减少网络往返次数

  • 先查询再更新:这种方式需要客户端和数据库服务器之间进行多次网络通信。首先,客户端发送一个 SELECT 查询请求,然后等待服务器的响应。如果记录不存在,客户端再发送一个 INSERT 请求;如果记录存在,客户端发送一个 UPDATE 请求。
  • ON DUPLICATE KEY UPDATE:这种方式只需要一次网络往返。客户端发送一个 INSERT 请求,服务器根据唯一键冲突的情况决定是插入新记录还是更新现有记录,并返回相应的结果。

2. 减少数据库事务开销

  • 先查询再更新:这种方式通常涉及多个独立的事务。首先是一个查询事务,然后是一个插入或更新事务。每个事务都需要一定的开销,包括日志记录、锁管理和提交/回滚操作。
  • ON DUPLICATE KEY UPDATE:这种方式通常在一个事务中完成插入或更新操作。这样可以减少事务管理的开销,提高性能。

3. 利用数据库的优化机制

  • 先查询再更新:这种方式需要数据库分别处理 SELECT 查询和 INSERT/UPDATE 操作。每个操作都需要数据库进行索引查找、数据读取和写入等操作。
  • ON DUPLICATE KEY UPDATE:这种方式可以让数据库在一个操作中同时处理插入和更新逻辑。数据库可以利用其内部的优化机制,例如索引合并、覆盖索引等,来提高查询和更新的效率。

4. 避免锁的长时间持有

  • 先查询再更新:这种方式在查询阶段需要获取共享锁(SELECT ... FOR UPDATE),在插入或更新阶段需要获取排他锁(INSERT 或 UPDATE)。这可能导致锁的长时间持有,增加锁的竞争和等待时间。
  • ON DUPLICATE KEY UPDATE:这种方式在一个操作中完成插入或更新,减少了锁的持有时间,降低了锁的竞争和等待时间。

具体例子分析

假设我们有一个表 users,包含以下字段:id(主键)、name 和 age

先查询再更新的方式:
-- 查询记录是否存在 
SELECT * FROM users WHERE id = 1 FOR UPDATE;-- 如果记录不存在,则插入新记录;否则更新现有记录 
INSERT INTO users (id, name, age) VALUES (1, 'John', 25)
ORUPDATE XXX

 

这种方式需要两次网络往返,涉及两个独立的事务,并且在查询阶段需要获取共享锁,在插入或更新阶段需要获取排他锁。

ON DUPLICATE KEY UPDATE 的方式:
INSERT INTO users (id, name, age) VALUES (1, 'John', 25)
ON DUPLICATE KEY UPDATE name = VALUES(name), age = VALUES(age);

 

这种方式只需要一次网络往返,涉及一个事务,在一个操作中完成插入或更新,减少了锁的持有时间。

总结

ON DUPLICATE KEY UPDATE 通过减少网络往返次数、减少数据库事务开销、利用数据库的优化机制以及避免锁的长时间持有,显著提高了性能。特别是在高并发环境下,这种优势更加明显。

相关文章:

  • 快速排序(2)
  • 天线静电防护:NRESDTLC5V0D8B
  • ‌软件接口压力测试方案模板
  • 如何编译得到elf文件
  • 边缘匹配+双直线
  • QT的信号槽的直接触发,队列触发,自动触发
  • # 使用python写一个PDF文件转换成word 文件
  • 【Linux 并发与竞争实验】
  • Python自学第1天:变量,打印,类型转化
  • FoundationPose 4090部署 真实场景迁移
  • 聊聊 JUC 下的 CountDownLatch、CyclicBarrier、Phaser 和 Semaphore
  • 一次引入第三方库导致的权限崩溃
  • 【YOLOv8改进- Backbone主干】CVPR2025 MambaOut :为图像分类任务设计的轻量级模型,曼巴永存!
  • std::map gdb调试ok ,直接运行会crash
  • 如何用 esProc 补充数据库 SQL 的缺失能力
  • 湖南(源点咨询)市场调研 商业综合体定位调研分享(中篇)
  • mapstruct使用详解
  • 12.第二阶段x64游戏实战-远程调试
  • 美团一面总结
  • list的一些常用接口
  • 空间坐标系做图网站/域名权重是什么意思
  • p2p网站建设报价/企业网络组建方案
  • 怎么做电玩网站/百度推广优化怎么做
  • 电商网官方网站/济南网站建设哪家专业
  • 个人网站备案名字大全/网络营销策略案例
  • 国外网站开发公司/广告公司品牌营销推广