您的位置:首页 > 汽车 > 时评 > 如何创建自己的博客_短视频seo营销_品牌seo主要做什么_百度极速版app下载安装挣钱

如何创建自己的博客_短视频seo营销_品牌seo主要做什么_百度极速版app下载安装挣钱

2025/4/23 12:05:57 来源:https://blog.csdn.net/liuming690452074/article/details/147285347  浏览:    关键词:如何创建自己的博客_短视频seo营销_品牌seo主要做什么_百度极速版app下载安装挣钱
如何创建自己的博客_短视频seo营销_品牌seo主要做什么_百度极速版app下载安装挣钱

从更底层来看,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 通过减少网络往返次数、减少数据库事务开销、利用数据库的优化机制以及避免锁的长时间持有,显著提高了性能。特别是在高并发环境下,这种优势更加明显。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com