MySQL面试高频问题全解析:66道经典题带你通关(附答案+场景实战)
一、引言
MySQL作为互联网技术栈的核心组件,其面试题始终是大厂招聘的重点。最近整理的《MySQL面试题,66道》(链接:https://www.wanxiangyundang.top/read/MySQLms/1.md)覆盖基础语法、索引优化、事务锁机制等核心考点。本文结合实际面试场景,筛选出高频问题并附详细解析,助你快速掌握答题逻辑,文末附PDF下载方式!
二、基础语法与设计规范
1. 三大范式:从理论到反范式实践
问题:解释数据库三大范式,为什么互联网公司常用反范式设计?
解析:
- 第一范式(1NF):字段不可再分(如用户表地址拆分为省/市/区)。
- 第二范式(2NF):非主键字段完全依赖主键(如订单表用订单ID+商品ID作为联合主键)。
- 第三范式(3NF):非主键字段不依赖其他非主键字段(如订单表不存储用户详细信息)。
反范式场景:电商订单表冗余用户昵称,避免跨表查询;社交APP存储用户点赞数冗余字段,减少实时计算压力。
2. 索引失效场景:避坑指南
问题:哪些操作会导致索引失效?请举例说明。
高频场景:
- 函数运算:
SELECT * FROM users WHERE YEAR(create_time) = 2023;
(应改为WHERE create_time >= '2023-01-01'
)。 - 隐式类型转换:字段为字符串类型,查询时未加引号:
SELECT * FROM users WHERE phone = 13812345678;
(等价于phone = '13812345678'
,但会触发全表扫描)。 - OR条件与非索引列:
SELECT * FROM orders WHERE user_id=123 OR status='paid';
(若status未建索引,会跳过user_id索引)。
三、索引与查询优化
3. B+树索引:为什么是最优选择?
问题:MySQL为什么选择B+树作为索引数据结构?
核心优势:
- 磁盘IO效率:B+树每个节点存储更多键值,树高更低(通常3层可存千万级数据),减少磁盘访问次数。
- 范围查询友好:叶子节点通过双向链表连接,适合
ORDER BY
和范围查询(如BETWEEN 100 AND 200
)。 - 数据更新成本:非叶子节点仅存储键值,数据修改时仅需更新叶子节点,减少树结构调整。
4. 慢SQL优化:从定位到解决方案
问题:如何优化慢SQL?请结合执行计划分析。
步骤解析:
- 定位慢SQL:开启慢查询日志,用
mysqldumpslow
分析Top SQL。 - 查看执行计划: