首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >WHERE没走索引,UPDATE锁了100万行——锁范围等于扫描行数的底层逻辑

WHERE没走索引,UPDATE锁了100万行——锁范围等于扫描行数的底层逻辑

作者头像
这个DBA有点耶
发布于 2026-10-12 16:22:44
发布于 2026-10-12 16:22:44
540
举报
概述
很多人以为“我只改10行,凭什么锁了100万行”。InnoDB没有真正的“锁升级”机制——它不会主动把行锁升级为表锁。所谓的“锁升级”,本质是WHERE条件没走索引导致全表扫描,扫过的每一行都被加了锁,等效于锁了整张表。本文拆解这个反直觉结论的底层逻辑,分析RR隔离级别下间隙锁的加剧效应,给出三种典型场景和解决方案。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

目录
  • 一、为什么UPDATE/DELETE比SELECT危险得多
  • 二、锁升级的三种典型场景
  • 三、怎么确认锁的范围
  • 四、解决方案
  • 五、小结
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档