MySQL 专题:索引、事务、日志、MVCC、执行计划与性能优化
约 1339 字大约 4 分钟
MySQL 是后端开发最常用的关系型数据库之一,也是数据库面试中最容易追问到底的专题。学习 MySQL 时,建议围绕“索引怎么让查询变快、事务怎么保证一致性、日志怎么保证恢复和复制、执行计划怎么定位慢 SQL”这几条主线展开。
适合谁看
- 想系统学习 MySQL 原理和性能优化的后端开发者。
- 准备 MySQL 索引、事务、MVCC、日志、执行计划相关面试题的同学。
- 已经能写常规 SQL,但对慢 SQL 分析、索引设计和事务问题不够熟的读者。
- 需要在项目中处理 MySQL 性能、数据一致性和字段设计问题的工程师。
学习重点
- B+ 树索引、聚簇索引、二级索引、覆盖索引和回表分别是什么?
- 哪些 SQL 写法会导致索引失效,如何通过执行计划验证?
- MySQL 事务隔离级别如何影响脏读、不可重复读和幻读?
- InnoDB 如何通过 MVCC、undo log 和 Read View 实现快照读?
- binlog、redo log、undo log 分别解决复制、崩溃恢复和事务回滚中的哪些问题?
- 慢 SQL 优化应该如何从建表、索引、SQL 写法和执行计划逐层定位?
建议阅读顺序
- MySQL 常见面试题总结:先建立 MySQL 高频问题清单。
- MySQL 索引详解、MySQL 索引失效场景总结:理解索引原理和常见失效场景。
- MySQL 事务隔离级别详解、InnoDB 存储引擎对 MVCC 的实现:掌握事务和一致性读。
- MySQL 三大日志详解、SQL 语句在 MySQL 中的执行过程:理解写入、提交、恢复和执行链路。
- MySQL 执行计划分析、MySQL 高性能优化规范建议总结:把原理落到慢 SQL 和工程规范上。
核心文章
总览与规范
- MySQL 常见面试题总结:串联索引、事务、锁、日志、存储引擎和 SQL 优化等高频考点。
- MySQL 高性能优化规范建议总结:从建表、字段、索引、SQL、事务和开发规范角度总结优化建议。
- 一千行 MySQL 学习笔记:适合用来查漏补缺,快速回顾 MySQL 常见知识点。
索引与执行计划
- MySQL 索引详解:理解索引数据结构、聚簇索引、二级索引、覆盖索引、最左前缀和索引设计。
- MySQL 索引失效场景总结:整理常见索引失效写法和排查思路。
- MySQL 隐式转换造成索引失效:聚焦隐式类型转换导致的索引失效问题。
- MySQL 执行计划分析:掌握 EXPLAIN 的 type、key、rows、Extra 等关键字段。
事务、MVCC 与日志
- MySQL 事务隔离级别详解:理解读未提交、读已提交、可重复读、串行化以及并发读异常。
- InnoDB 存储引擎对 MVCC 的实现:理解隐藏字段、undo log、Read View 和可见性判断。
- MySQL 三大日志详解:理解 binlog、redo log、undo log 的作用、写入时机和两阶段提交。
执行过程与工程细节
- SQL 语句在 MySQL 中的执行过程:理解连接器、查询缓存、分析器、优化器、执行器和存储引擎的协作。
- MySQL 查询缓存详解:理解查询缓存的工作方式、失效原因和被移除的背景。
- MySQL 自增主键一定是连续的吗?:理解自增值分配、回滚、批量插入和主键连续性的关系。
- MySQL 日期类型选择建议:对比 DATE、DATETIME、TIMESTAMP 等类型的适用场景。
高频问题
- MySQL 为什么推荐使用 B+ 树索引?
- 聚簇索引和二级索引有什么区别?什么是回表和覆盖索引?
- 最左前缀原则是什么?哪些场景会导致索引失效?
- 如何通过 EXPLAIN 判断一条 SQL 是否走了合适的索引?
- MySQL 的四种事务隔离级别分别解决什么问题?
- MVCC 是如何实现的?Read View 里有哪些关键字段?
- binlog、redo log、undo log 有什么区别?两阶段提交解决什么问题?
- 慢 SQL 优化应该从哪些维度入手?
- 自增主键为什么不一定连续?
- DATETIME 和 TIMESTAMP 应该如何选择?
相关专题
写在最后
如果内容对你有帮助的话,欢迎顺手给 JavaGuide 点一个免费的 Star 支持一下:GitHub | Gitee。
JavaGuide 已持续维护近七年,累计 6100+ 次提交,来自 620+ 位贡献者共同完善。你的 Star、反馈和 PR,都是这个项目继续更新的动力。
如果你正在准备后端/AI 应用开发面试,也可以了解一下我的知识星球,里面包括后端和 AI 实战项目、简历优化、一对一提问和高频考点资料,已经持续维护六年。
