MySQL 八股文知识大全(面试+复习必备)

MySQL核心八股文知识总览(面试与复习必备)

本文整理了MySQL最为关键的八股文内容,涵盖范式、SQL执行流程、存储引擎、索引、事务等诸多模块,适合在面试前复习以及进行系统性学习。


1. 数据库三大范式

  • 第一范式(1NF) :每一个列都得是不可再分的基本原子单元。
  • 第二范式(2NF) :在满足第一范式的基础上,所有的非主属性得完全依赖于主键,而不是主键的某一部分。
  • 第三范式(3NF) :在满足第二范式的基础上,非主属性不能依赖于其他非主属性。

2. 一条SQL的执行流程

  1. 连接器:负责建立连接以及进行身份验证。
  2. 查询缓存(MySQL 8.0之后被废弃)。
  3. 解析器:生成语法相关的结构树。
  4. 优化器:挑选出最优的执行方案。
  5. 执行器:与存储引擎进行交互来获取数据。

3. 存储引擎对比

引擎 特性阐述
MyISAM 不支持事务和外键,读取性能较为出色
Memory 数据存储于内存中,性能表现优越
InnoDB 默认的引擎,支持事务、行级锁以及崩溃恢复功能

4. 索引分类方式

  • 按数据结构 :有B+ Tree、Hash、Full-Text等类型。
  • 按物理存储形式 :包含聚簇索引和非聚簇索引。
  • 按字段特性 :分为主键、唯一、普通、前缀索引。
  • 按字段数量 :有单列索引和联合索引。

5. 聚簇索引与非聚簇索引对比

维度 聚簇索引 非聚簇索引
存储结构 叶子节点存储完整的数据 叶子节点存储主键值的指针
查询性能 查询速度快,能避免回表 覆盖索引时查询快,非覆盖索引需要回表
唯一性 每一张表仅有一个 可以有多个
适用场景 用于范围/排序查询 适合精确查找

6. 主键的选择方法

  • 字段得是唯一的,而且不能为null。
  • 建议采用递增的ID,这样能避免页分裂情况。
  • 不要选用业务相关的字段。
  • 分布式系统建议使用雪花ID。

7. 索引实现原理

  • InnoDB采用B+Tree结构。
  • 非叶子节点存储索引信息,叶子节点存储数据内容。
  • 叶子节点通过双向链表相互连接。
  • 查询效率高,I/O次数较少(大概3~4次)。

8. B+Tree的特点

  • 所有数据都在叶子节点上。
  • 非叶子节点只存储键值。
  • 叶子节点通过双向链表连接,适合范围查询场景。
  • 树的高度较低,查询速度快。

9. B+Tree、BTree、Hash对比

项目 B+ Tree B Tree Hash
范围查询 能够支持 不太方便 不支持
查询稳定性 比较稳定 不稳定 高效(仅适用于等值查询)
适用场景 处理大量数据 中等复杂度的查询 精确查找(非范围类)

10. 索引失效的常见情形

  • 使用 %xx 或者 %xx% 进行模糊查询。
  • 在索引字段上运用函数或者表达式。
  • 字符串字段和数字进行比较(涉及类型转换)。
  • 联合索引不满足最左前缀的规则。
  • WHERE子句中包含OR且部分字段没有索引。

11. 索引的优缺点

优点: 能够提升查询的速度。

缺点:
* 占用存储空间。
* 增删改的性能会降低。
* 索引维护的成本较高。


12. 索引优化建议

  • 使用前缀索引来减小索引项的大小。
  • 利用覆盖索引来避免回表操作。
  • 自增主键插入效率高。
  • 联合索引遵循最左匹配的原则。
  • 避免因函数、类型转换、模糊查询等导致索引失效。

13. 事务四大特性ACID

特性 含义解释 实现途径
原子性 要么全部执行,要么全部不执行 undo log
一致性 符合数据完整性的约束条件 ACID整体来保障
隔离性 并发事务之间互不干扰 MVCC / 锁机制
持久性 提交的数据会永久保存 redo log

14. 并发问题与事务隔离级别

问题类型 解释说明 出现的级别
脏读 读到了未提交事务的数据 读未提交
不可重复读 同一事务两次查询结果不一样 读未提交、读已提交
幻读 查询结果的数量不一致 可重复读以下级别

事务隔离级别:
* Read Uncommitted
* Read Committed
* Repeatable Read(MySQL默认)
* Serializable


15. MVCC实现原理

  • 多版本控制,读取旧版本的数据。
  • 运用版本链结构来控制可见性。
  • 是非阻塞读,适合高并发的场景。

16. 锁的分类

  • 全局锁:例如 flush tables with read lock
  • 表级锁:包含表锁、元数据锁、意向锁。
  • 行级锁:有记录锁、间隙锁、临键锁(Next-Key Lock)。

17. 表锁与行锁对比

特性 表锁 行锁
粒度 粗,锁住整个表 精确,锁住具体记录
并发性
应用场景 批量操作、表结构修改 单行读写操作

18. MySQL日志类型

  • redo log :物理日志,保障持久性。
  • undo log :用于回滚,保障原子性。
  • binlog :逻辑日志,用于备份和主从复制。
  • relay log :从库同步日志。
  • 慢查询日志 :记录慢SQL。

19. Redo Log的作用

  • 采用WAL机制:先记录日志,再写磁盘。
  • 顺序写入来优化性能。
  • 宕机后可用于恢复已提交的数据。

20. 提升查询性能的方法

  1. 优化SQL语句的写法。
  2. 合理运用索引。
  3. 避免索引失效。
  4. 使用EXPLAIN分析执行计划。
  5. 数据分页优化(如延迟加载)。
  6. 合理设计表结构。
  7. 利用缓存(如Redis)降低数据库压力。

欢迎点赞、收藏并参与评论交流!

要是觉得这份总结有帮助,别忘了关注我获取更多干货内容~

版权声明:程序员胖胖胖虎阿 发表于 2025年9月17日 上午11:46。
转载请注明:MySQL 八股文知识大全(面试+复习必备) | 胖虎的工具箱-编程导航

相关文章

暂无评论

暂无评论...