MySQL 主题怎么系统整理:索引、慢查询、DDL、锁和事务

2次阅读
没有评论

MySQL 知识很容易越记越散:今天看索引,明天看慢查询,后天又碰到 DDL、锁等待和连接池异常。比较稳的方式是先搭一个主题地图,把问题放到正确的位置。

我通常会把 MySQL 拆成六组。

索引和执行计划

第一组是索引和执行计划。这里要理解:

  • B+ 树。
  • 聚簇索引和二级索引。
  • 最左匹配。
  • 回表。
  • order by 和索引顺序。
  • EXPLAIN 的访问类型、rows 和 extra。

遇到查询慢,先不要急着加索引,而是先看执行计划。索引有没有被用上、扫描行数大不大、是否出现 filesort,往往比猜测更可靠。

慢查询和 SQL 改写

第二组是慢查询优化。常见问题包括:

  • 复杂 join。
  • 深分页。
  • 子查询改写。
  • 大表范围查询。
  • 条件选择性差。
  • 统计类 SQL 过重。

深分页可以考虑延迟关联或游标分页;复杂查询要先确认业务是否真的需要一次查这么多字段。慢查询优化不是只看 SQL,还要看调用场景。

DDL 和字段变更

第三组是 DDL。比如加字段、改字段、建索引、字符集、大小写敏感和在线变更。

生产环境 DDL 要特别谨慎:

  1. 先确认表大小。
  2. 看是否会锁表。
  3. 评估主从延迟。
  4. 准备回滚方案。
  5. 必要时使用在线 DDL 工具。

很多事故不是 DDL 语法写错,而是低估了表大小和锁影响。

连接池和异常排障

第四组是连接相关问题:

  • 连接池耗尽。
  • 通信异常。
  • 事务提交或回滚失败。
  • 锁等待超时。
  • 数据库连接超时。

这类问题要同时看应用日志、连接池指标和数据库状态。只看异常堆栈,往往只能看到结果,看不到根因。

锁、隔离级别和 MVCC

第五组是锁和事务隔离:

  • 行锁、表锁、间隙锁。
  • 当前读和快照读。
  • 死锁。
  • 隔离级别。
  • LBCC 和 MVCC。

理解 MVCC 之后,再看可重复读、幻读和快照读,会清楚很多。排查死锁时,则要看事务顺序、索引条件和更新范围。

事务、分库分表和批量写入

第六组是更偏架构的主题:

  • Spring 事务边界。
  • 分库分表。
  • 批量插入。
  • SQL 片段沉淀。
  • 订单或报表类读模型。

这部分不只是数据库知识,还会牵涉业务建模和系统架构。

维护建议

整理 MySQL 笔记时,不要把所有东西都堆到一个文档里。可以按“索引、慢查询、DDL、连接异常、锁事务、架构专题”拆开。每次遇到问题,先判断它属于哪一类,再补充到对应主题。

这样过一段时间后,MySQL 笔记会从资料堆变成可检索的排障地图。

正文完
 0
bdspAdmin
版权声明:本站原创文章,由 bdspAdmin 于2026-07-05发表,共计913字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
评论(没有评论)