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

Posted mr.杰瑞

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了mysql 批量更新还是单条更新如何选择相关的知识,希望对你有一定的参考价值。

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

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

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

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

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

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

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

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

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

补充说明一下:

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

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

以上是关于mysql 批量更新还是单条更新如何选择的主要内容,如果未能解决你的问题,请参考以下文章

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

mysql 如何更新某一条数据内容

python Postgresql批量更新对比单条更新

如何更新mysql数据库表中的单条数据?

Spring Boot Elasticsearch7.6.2实现创建索引删除索引判断索引是否存在获取/添加/删除/更新索引别名单条/批量插入单条/批量更新删除数据递归统计ES聚合的数据

如何在 MySQL 中同时更新和选择