文章目录
一、事务篇:数据库的"防弹衣"怎么造?
来!咱们先看第一个必考题——事务的ACID特性(这玩意儿面试官最爱刨根问底)!
1.1 ACID四重奏
- 原子性(Atomicity):要么全成功,要么全失败!就像你网购下单,付了钱没生成订单?绝对不行!(InnoDB用undo log实现回滚)
- 一致性(Consistency):数据永远合法状态!转账时总额不变这个铁律,数据库必须死守
- 隔离性(Isolation):多个事务像在平行宇宙操作(当然实际情况要看隔离级别)
- 持久性(Durability):提交=永久保存!就算断电也不怕(redo log来兜底)
1.2 隔离级别陷阱题
记住这四个级别(面试必背):
- 读未提交 → 脏读警告!
- 读已提交 → Oracle默认级别
- 可重复读 → MySQL默认(但会有幻读)
- 序列化 → 性能杀手慎用
(重点来了)可重复读怎么解决幻读?间隙锁!比如你查age>20的记录,MySQL会自动给(20,+∞)加锁,阻止其他事务插入新数据
二、索引优化:数据库的"超能力"开关
2.1 B+树索引的优缺点(必考对比题!)
优点:
- 范围查询快如闪电(比如找18-25岁用户)
- 数据全在叶子节点,查询稳定
- 树矮胖,3-4层就能存海量数据
缺点:
- 更新维护成本高(频繁更新的字段不适合建索引)
- 最左前缀原则限制(组合索引(a,b,c)必须按顺序用)
- 占用额外空间(索引可不是白给的!)
2.2 最坑面试题:为什么不用哈希索引?
哈希看着O(1)查询很美好,但:
- 只能等值查询(范围查询直接跪)
- 哈希冲突影响性能
- 不支持排序
- 部分场景内存消耗更大
(实战技巧)遇到范围查询、排序、分组,还是乖乖用B+树吧!
三、存储引擎对决:InnoDB vs MyISAM
3.1 核心区别表(背下来能救命!)
| 特性 | InnoDB | MyISAM |
|---|---|---|
| 事务 | ✅支持 | ❌不支持 |
| 外键 | ✅支持 | ❌不支持 |
| 锁粒度 | 行级锁 | 表级锁 |
| 崩溃恢复 | 有redo log | 需要修复表 |
| 存储文件 | .ibd + .frm | .MYD + .MYI |
| 适合场景 | 高并发写/事务 | 读密集型 |
(血泪教训)现在默认都用InnoDB!MyISAM只在读远大于写且不需要事务时考虑
四、锁机制:数据库的"交通管制"
4.1 行锁的三种模式
- 记录锁(Record Locks):锁单条记录
- 间隙锁(Gap Locks):锁区间,防幻读
- 临键锁(Next-Key Locks):记录锁+间隙锁组合技
(重点案例)执行SELECT * FROM users WHERE age=20 FOR UPDATE时:
- 如果age=20的记录不存在 → 间隙锁锁住(上一个age值, 下一个age值)
- 如果存在 → 临键锁锁住该记录及前面的间隙
4.2 死锁检测小妙招
遇到死锁别慌!用SHOW ENGINE INNODB STATUS查看最新死锁信息,重点看:
- 哪个事务持有锁
- 哪个事务在等待
- 冲突的资源是什么
(避坑指南)批量更新时按固定顺序操作,能有效避免死锁!
五、性能优化三板斧
5.1 EXPLAIN执行计划必看项
- type:system > const > eq_ref > ref > range > index > ALL(从左到右性能递减)
- key_len:使用的索引长度(越大越好)
- rows:预估扫描行数
- Extra:Using filesort/Using temporary要警惕!
5.2 慢查询优化实战
遇到慢SQL怎么办?分四步走:
- 开慢查询日志:
slow_query_log=1 - 用
mysqldumpslow分析日志 - EXPLAIN查看执行计划
- 加索引/改写SQL/调整业务逻辑
(真实案例)某电商平台把SELECT *改为只查必要字段,QPS从200飙升到1500!
六、终极拷问:你说你懂MySQL?
这几个问题能让你脱颖而出:
- WAL机制如何保证持久性?(答案:redo log先写盘)
- change buffer是干什么的?(答案:优化非唯一索引更新)
- 什么情况下索引会失效?(答案:函数操作、隐式转换、like左模糊等)
- 为什么推荐用自增主键?(答案:避免页分裂,提升插入性能)
- 主从延迟怎么处理?(答案:并行复制、半同步、业务层补偿)
记住,面试官最爱追问"为什么"!比如:
- 为什么用B+树不用B树?(答案:B+树非叶子节点不存数据,能存更多键值)
- 为什么redo log要两阶段提交?(答案:保证binlog和redo log一致性)
最后送大家一个实战技巧:把常见面试题整理成脑图,每天抽10分钟过一遍,坚持一个月,你会发现自己能吊打90%的面试者!记得结合项目经验准备案例,比如"我在XX项目中通过调整索引使查询时间从2s降到50ms",这种具体案例能让面试官眼前一亮!
172万+

被折叠的 条评论
为什么被折叠?



