MySql 中 一次update更新多条数据

针对大量数据进行批量更新与插入时出现的效率问题,本文介绍了如何通过优化数据库操作来显著提高执行速度。包括使用索引、批量操作以及利用CASE语句进行批量更新的具体实践。

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

我最近遇到一个导入Excel表中数据到数据库的需求,数据量一万多条。需先查询数据库中是否存在要插入的数据,若存在则更新数据,否则插入数据。我首先按照常规思路先查询,然后插入或更新。然而nginx返回 504 time out 错误。显然,数据库操作消耗了太多的时间。经测试,该操作消耗了300多秒时间。

显然,数据库需要做一些优化。我首先想到给要查询的字段加索引。经测试加索引后测试,完成一次操作耗时50秒左右,勉强可以接受。将代码部署到服务器测试发现耗时高达200秒左右。

在数据库操作中,时间很大一部分消耗在了数据库链接,提交等操作上。尽量减少这些操作,能在很大程度上提高数据库操作的执行效率。

我首先想到批量插入数据,通过一次性插入若干条数据。减少不必要的操作,达到节约时间的目的。

然后我就想,能不能做到批量更新数据呢?我们知道Mysql并没有提供原生的批量更新方法。但并不意味没有方法能实现。在网上我找到下面这种方法

UPDATE mytable 
SET myfield = CASE other_field 
WHEN 1 THEN 'value' 
WHEN 2 THEN 'value' 
WHEN 3 THEN 'value' 
END 
WHERE id IN (1,2,3) 
我通过字符串拼接的方法,一次对30条数据执行更新操作。经测试,执行时间达到14秒。部署到服务器测试,21秒也完成了操作。

本方法亲测可用,就是拼接字符串有点麻烦。希望对你有所帮助。

我用python封装了一个工具,你只需传入数据的数组,就会自动将已存在的数据做批量更新,新的数据做批量插入。这是它的地址:python封装一个效率极高的 批量更新、插入合一的工具
.
如果有帮到您,打个赏呗
在这里插入图片描述
.
.
.
.

.
.
.

.
.
.

.
.
.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值