Mysql的问题及浅探索:update语句未使用索引的锁机制

Mysql的问题及浅探索:update语句未使用索引的更新慢的问题

前提条件

一、表数据总量有一百多万条数据,表结构如下:
idnamecodeintegralcreate_time
主键名称代号积分时间
二、更新语句如下,其中只有name,code作为条件语句
 UPDATE table1  
 SET name='张三',code='zhangsan',integral=600,create_time='2022-10-21 09:22:29.098'  
 WHERE name='张三' AND code='zhangsan'
三、更新慢的问题

在有5000条以上的更新语句操作时,会出现服务器的cpu升高

问题原因的猜想

一、无索引的问题

1、由于没有索引,update语句执行前会进行全表扫描搜索匹配,并且在找到相应的满足where条件的所有行进行行级锁的锁定
(例如 UPDATE、DELETE、INSERT会自动获取排他锁(Exclusive Lock))

2、在默认情况下,当 MySQL 进行全表扫描时,会应用一种称为"隐式锁定"(Implicit Locking)的机制,其中包括对扫描的行进行锁定,以防止其他事务对这些行进行并发修改。
在全表扫描的情况下,MySQL 会使用共享锁(Shared Lock),允许多个事务同时读取同一行数据,但阻止其他事务获取排他锁(Exclusive Lock),从而防止其他事务对这些行进行写操作。
隐式锁定的目的是确保在事务中的全表扫描期间,其他事务不会对被扫描的行进行写操作,以保持事务的隔离性和一致性。
随着 MySQL 版本的演进,数据库引擎可能会对隐式锁定的实现进行一些优化,以提高性能和并发性。然而,在默认情况下,全表扫描通常会导致行级锁的获取。

所以需要注意的是,全表扫描可能会对性能产生负面影响,尤其是在大表上。在执行大量全表扫描的查询或更新操作之前,请仔细考虑并测试性能,以确保数据库的正常运行。添加适当的索引是优化性能的一种方法,因为它可以将全表扫描转换为更高效的索引扫描

以上是update语句未使用索引的更新慢的问题,并且使CPU升高的问题是全表扫描,锁的释放与获取的消耗
敬请各位大佬的补充以及指正
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值