MySQL面试必杀题:这些知识点能让你秒杀80%候选人!

一、事务篇:数据库的"防弹衣"怎么造?

来!咱们先看第一个必考题——事务的ACID特性(这玩意儿面试官最爱刨根问底)!

1.1 ACID四重奏

  • 原子性(Atomicity):要么全成功,要么全失败!就像你网购下单,付了钱没生成订单?绝对不行!(InnoDB用undo log实现回滚)
  • 一致性(Consistency):数据永远合法状态!转账时总额不变这个铁律,数据库必须死守
  • 隔离性(Isolation):多个事务像在平行宇宙操作(当然实际情况要看隔离级别)
  • 持久性(Durability):提交=永久保存!就算断电也不怕(redo log来兜底)

1.2 隔离级别陷阱题

记住这四个级别(面试必背):

  1. 读未提交 → 脏读警告!
  2. 读已提交 → Oracle默认级别
  3. 可重复读 → MySQL默认(但会有幻读)
  4. 序列化 → 性能杀手慎用

(重点来了)可重复读怎么解决幻读?间隙锁!比如你查age>20的记录,MySQL会自动给(20,+∞)加锁,阻止其他事务插入新数据

二、索引优化:数据库的"超能力"开关

2.1 B+树索引的优缺点(必考对比题!)

优点

  • 范围查询快如闪电(比如找18-25岁用户)
  • 数据全在叶子节点,查询稳定
  • 树矮胖,3-4层就能存海量数据

缺点

  • 更新维护成本高(频繁更新的字段不适合建索引)
  • 最左前缀原则限制(组合索引(a,b,c)必须按顺序用)
  • 占用额外空间(索引可不是白给的!)

2.2 最坑面试题:为什么不用哈希索引?

哈希看着O(1)查询很美好,但:

  • 只能等值查询(范围查询直接跪)
  • 哈希冲突影响性能
  • 不支持排序
  • 部分场景内存消耗更大

(实战技巧)遇到范围查询、排序、分组,还是乖乖用B+树吧!

三、存储引擎对决:InnoDB vs MyISAM

3.1 核心区别表(背下来能救命!)

特性InnoDBMyISAM
事务✅支持❌不支持
外键✅支持❌不支持
锁粒度行级锁表级锁
崩溃恢复有redo log需要修复表
存储文件.ibd + .frm.MYD + .MYI
适合场景高并发写/事务读密集型

(血泪教训)现在默认都用InnoDB!MyISAM只在读远大于写且不需要事务时考虑

四、锁机制:数据库的"交通管制"

4.1 行锁的三种模式

  1. 记录锁(Record Locks):锁单条记录
  2. 间隙锁(Gap Locks):锁区间,防幻读
  3. 临键锁(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怎么办?分四步走:

  1. 开慢查询日志:slow_query_log=1
  2. mysqldumpslow分析日志
  3. EXPLAIN查看执行计划
  4. 加索引/改写SQL/调整业务逻辑

(真实案例)某电商平台把SELECT *改为只查必要字段,QPS从200飙升到1500!

六、终极拷问:你说你懂MySQL?

这几个问题能让你脱颖而出:

  1. WAL机制如何保证持久性?(答案:redo log先写盘)
  2. change buffer是干什么的?(答案:优化非唯一索引更新)
  3. 什么情况下索引会失效?(答案:函数操作、隐式转换、like左模糊等)
  4. 为什么推荐用自增主键?(答案:避免页分裂,提升插入性能)
  5. 主从延迟怎么处理?(答案:并行复制、半同步、业务层补偿)

记住,面试官最爱追问"为什么"!比如:

  • 为什么用B+树不用B树?(答案:B+树非叶子节点不存数据,能存更多键值)
  • 为什么redo log要两阶段提交?(答案:保证binlog和redo log一致性)

最后送大家一个实战技巧:把常见面试题整理成脑图,每天抽10分钟过一遍,坚持一个月,你会发现自己能吊打90%的面试者!记得结合项目经验准备案例,比如"我在XX项目中通过调整索引使查询时间从2s降到50ms",这种具体案例能让面试官眼前一亮!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值