🔥 MySQL 高频面经总结(2025秋招版)

📌 覆盖 90% 大厂面试真题 | 附详细解析

【拼多多集团-PDD校园招聘】内推链接:https://careers.pddglobalhr.com/campus/grad/detail?t=DBh7T7ZBAy,内推码:DBh7T7ZBAy。服务端研发工程师 期待你的加入!我们一起,无拼不青春!(通过此链接投递计入内推,内推简历优先筛选~)

📚 一、索引与优化(必问!)
1. B+树 vs B树 vs 哈希索引
✅ 答:

对比项B+树B树哈希索引
结构非叶子节点只存索引所有节点存数据数组+链表
查询范围查询高效(O(logN))随机查询快(O(logN))等值查询O(1)
适用InnoDB默认MongoDBMemory引擎
👉 为什么MySQL用B+树?

叶子节点链表结构适合范围查询(如WHERE id > 100)
非叶子节点不存数据,单页能存更多索引,减少磁盘IO
2. 最左前缀原则
✅ 答:

联合索引 (a,b,c),必须从最左列开始匹配:
✅ 走索引:WHERE a=1 AND b=2、WHERE a=1
❌ 不走索引:WHERE b=2、WHERE c=3
优化建议:高频查询字段放左侧
3. Explain 关键字段解读
✅ 答:

字段含义优化方向
type访问类型(ALL→index→range→ref→const)尽量避免ALL
key实际使用的索引未走索引时检查SQL条件
rows预估扫描行数过大需优化索引或SQL
💡 二、事务与锁(高频!)
1. 事务四大特性(ACID)
✅ 答:

A原子性:事务要么全执行,要么全回滚(Undo Log)
C一致性:数据符合业务规则(如余额≥0)
I隔离性:事务间互不干扰(通过锁/MVCC实现)
D持久性:提交后数据不丢失(Redo Log)
2. 隔离级别与问题
✅ 答:

隔离级别脏读不可重复读幻读实现方式
读未提交❌❌❌无锁
读已提交(RC)✅❌❌快照读(MVCC)
可重复读(RR)✅✅❌快照读+间隙锁
串行化✅✅✅全表锁
👉 MySQL默认RR级别如何解决幻读?

快照读:MVCC版本控制
当前读:SELECT FOR UPDATE 加间隙锁
3. 乐观锁 vs 悲观锁
✅ 答:

对比项乐观锁悲观锁
实现版本号/CAS(如UPDATE SET version=version+1)SELECT FOR UPDATE
场景读多写少写多读少
🛠️ 三、性能优化(实战向)
1. 慢查询优化步骤
✅ 答:

定位:slow_query_log 开启慢查询日志
分析:EXPLAIN 查看执行计划
优化:
加索引(覆盖索引优化)
重构SQL(避免SELECT *、子查询改JOIN)
分库分表(数据量过大时)
2. 分库分表方案
✅ 答:

垂直分表:按字段拆分(如用户表拆为基础信息表+扩展表)
水平分库:按数据分片(如user_id % 3分到3个库)
中间件:ShardingSphere、MyCat
3. 主从同步原理
✅ 答:

主库:写Binlog
从库:IO线程拉取Binlog,SQL线程重放
延迟问题:
原因:从库单线程回放
解决:GTID并行复制
🎯 四、场景题(大厂必考)
1. “库存超卖”如何解决?
✅ 答:

悲观锁:SELECT FOR UPDATE

乐观锁:UPDATE stock SET count=count-1 WHERE count>=1
Redis+Lua:原子操作扣减库存
2. 订单表数据量过大,如何优化?
✅ 答:

冷热分离:3个月内的订单存主表,历史数据归档
分表:按用户ID哈希分表(如order_uid%10)
ES辅助查询:非核心字段存Elasticsearch
📌 五、学习建议
八股文:死磕《MySQL45讲》《高性能MySQL》
实战:用sysbench压测,模拟高并发场景
算法:LeetCode数据库题型(如#175组合表、#185部门工资前三)
🚀 秋招加油!你的Offer正在派送中!
(需要内推可私信,字节/腾讯/拼多多简历直达HR~)

#秋招#
全部评论

相关推荐

ResourceUt...:楼主有自己的垃圾箱,公司也有自己的人才库
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务