Mysql replace into 与 insert into on duplicate key update 死锁和性能测试

该博客通过性能测试和并发测试比较了MySQL中的REPLACE INTO和INSERT INTO ON DUPLICATE KEY UPDATE在不同场景下的死锁发生概率和性能。测试发现,当涉及自增ID主键时,REPLACE INTO可能导致更高的死锁概率,而性能表现相近。在数据量达到100W时,两者都可能出现慢日志,但并发的改查操作会导致慢日志明显增加。建议在高并发环境下避免使用REPLACE INTO。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


1   编写目的

1.  测试 replace into 引发死锁

2.  测试 replace 和INSET INTO  ***  ON DUPLICATE KEY UPDATE *** 性能差

2   数据库环境说明

1、 数据库系统:

名称:Mysql 5.5.31

引擎:innodb

       字符集:UTF8

       安装方式:源码编译安装   

2、 数据库部署环境:

软硬件环境:Linux(CentOS-6.2-x86_64)


3   测试工具

Mysql 自带  Mysqlslap

4   测试过程

所有操作前重启mysql,避免缓存。


测试表:

CREATE TABLE`test_replace_into` (

  `id` int(11) NOT NULL AUTO_INCREMENT,

  `wechat_init_code` int(11) NOT NULL,

  `used` varchar(50) DEFAULT '0',

  `expire` int(11) NOT NULL DEFAULT '0',

  PRIMARY KEY (`id`),

  UNIQUE KEY `ii` (`wechat_init_code`)

) ENGINE=InnoDBDEFAULT CHARSET=utf8;

insert_on_duplicate.sql

SET@mm=ROUND(RAND()*100000);

SET@nn=ROUND(RAND()*100000);

INSERT INTOtest.`test_replace_into`(wechat_init_code,used,expire) VALUES (@mm,@nn,@nn) ONDUPLICATE KEY UPDATE used =@nn,expire=@nn ;

replace_into.sql:

SET@mm=ROUND(RAND()*100000);

SET @nn=ROUND(RAND()*100000);

REPLACE INTOtest.&

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值