mysql 批量更新还是单条更新如何选择

首先说一下业务场景,需要替换某个字段的值,我选择的是批量更新,我队友选择的单条更新。

她说:选择单条更新吧,一个是稳,主要是保证数据准确,然后说,批量更新会引起锁表

表锁:不会出现死锁,发生锁冲突几率高,并发低。
行锁:会出现死锁,发生锁冲突几率低,并发高。

批量更新是否会引起锁表?

批量执行sql时,如果查到sql语句没有走索引,会出现表锁。

原因:
mysql的行锁是通过索引加载的,即是行锁是加在索引响应的行上的,要是对应的SQL语句没有走索引,则会全表扫描,行锁则无法实现,取而代之的是表锁。

简而言之:
不加索引时,update会使用表锁进行更新,影响所有行的查询更新

加了索引后,使用“行锁”进行udpate,只锁当前行。不影响其他行的查询更新

行锁必须有索引才能实现,否则会出现表锁,如果是主键索引会增加执行效率

补充说明一下:

主键索引也被称为聚簇索引,叶子节点存放的是整行数据; 而非主键索引被称为二级索引,叶子节点存放的是主键的值.
如果根据主键查询, 只需要搜索ID这颗B+树
而如果通过非主键索引查询, 需要先搜索k索引树, 找到对应的主键, 然后再到ID索引树搜索一次, 这个过程叫做回表.
也就是说, 非主键索引的查询需要多扫描一颗索引树, 效率相对更低.

在同样都有索引的条件下,必然是批量更新更好,执行效率高

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

mr.杰瑞

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值