最近帮学弟学妹整理面试资料,发现MySQL基础问题真是"老演员"了!今天就把高频考点掰开揉碎讲明白,附带超多实用案例,看完直接拿去用!(文末有总结表格方便复习)
1. 事务的ACID特性怎么记不会忘?
(敲黑板)事务四大特性:
- 原子性:要么全成功,要么全失败!就像网购付款,钱扣了必须发货,否则自动退回
- 一致性:数据要合法,比如A转账给B,两人总金额必须不变
- 隔离性:多个事务要"隔离",别互相干扰(后面讲隔离级别展开说)
- 持久性:提交后数据必须存到硬盘,断电也不丢
举个🌰:
START TRANSACTION;
UPDATE account SET balance = balance - 500 WHERE user = 'A';
UPDATE account SET balance = balance + 500 WHERE user = 'B';
COMMIT; -- 成功执行才会生效
2. 索引为什么能加速查询?
(原理党必看)索引就像字典的目录!B+树结构三大优势:
- 有序存储:叶子节点形成链表,范围查询超快
- 三层结构:千万级数据3次IO就能查到
- 覆盖索引:不用回表直接取数据
但注意⚠️:
- 不要乱建索引!更新数据时要维护索引,影响写入速度
- 最左匹配原则:比如index(a,b,c),where b=1用不到索引!
3. MyISAM和InnoDB到底差在哪?
(存储引擎选型必考)对比表格:
| MyISAM | InnoDB | |
|---|---|---|
| 事务 | ❌ | ✅ |
| 外键 | ❌ | ✅ |
| 锁粒度 | 表锁 | 行锁 |
| 崩溃恢复 | 容易丢数据 | 支持事务日志恢复 |
| 适用场景 | 读多写少 | 高并发写入 |
现在都2024年了,除非特殊需求,建议无脑选InnoDB!
4. SQL优化有哪些实用技巧?
(实战经验分享)五个黄金法则:
- EXPLAIN大法好:先看执行计划,重点看type列(最好到ref)
- **避免SELECT ***:只取需要的字段,特别是text/blob类型
- 批量操作:INSERT INTO … VALUES (),(),() 比多次insert快10倍
- LIMIT分页优化:不要用LIMIT 100000,20,改用WHERE id > 100000
- 索引下推:MySQL5.6+支持,在存储引擎层过滤数据
举个优化案例:
-- 优化前
SELECT * FROM orders WHERE date > '2023-01-01' ORDER BY id DESC LIMIT 1000,20;
-- 优化后
SELECT * FROM orders
WHERE id < (SELECT id FROM orders ORDER BY id DESC LIMIT 1000,1)
AND date > '2023-01-01'
ORDER BY id DESC LIMIT 20;
5. 事务隔离级别怎么选?
四个级别对比(从低到高):
- 读未提交:可能读到别人未提交的数据(脏读)→ 基本不用
- 读已提交:解决脏读 → Oracle默认
- 可重复读:同一事务多次读取结果一致 → MySQL默认
- 串行化:完全隔离,性能差 → 金融场景用
重点掌握:
- 幻读:可重复读级别下,通过间隙锁解决
- MVCC机制:通过版本链实现非锁定读
(篇幅限制,剩余重点问题请看下表👇)
| 问题 | 要点 | 常见考点 |
|---|---|---|
| 6. 锁的类型 | 共享锁、排他锁、意向锁 | 死锁排查方法 |
| 7. 视图的作用 | 简化查询、权限控制 | 物化视图与普通视图区别 |
| 8. 备份与恢复 | mysqldump vs xtrabackup | 增量备份原理 |
| 9. 连接类型 | 内连接、左连接、交叉连接 | USING和ON的区别 |
| 10. 性能监控 | slow_log、explain、show processlist | 索引优化建议 |
最后说两句
MySQL就像老朋友——你以为很熟了,每次面试总能发现新知识点!建议大家在本地装个MySQL8.0多实操,比如:
- 故意制造死锁看报错信息
- 不同隔离级别下测试各种读现象
- 用EXPLAIN分析自己的SQL语句
(附送小技巧)面试被问到不会的问题,可以这么说:“这个问题我之前主要关注实战应用,理论层面还需要深入,您能简单说明下吗?” —— 既诚实又能引导面试官讲解!
📢 互动时间:大家在MySQL面试中还遇到过哪些"奇葩"问题?欢迎评论区交流~(记得点赞收藏,需要的时候好找!)
860

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



