AI-Agent 高频面试题汇总 - MySQL进阶篇
1. InnoDB 的核心组成有哪些?
核心包括:Buffer Pool、Redo Log、Undo Log、Change Buffer、Doublewrite Buffer、自适应哈希索引(AHI)。面试重点:知道它们分别解决“性能”和“可靠性”问题。
2. Buffer Pool 是什么?为什么重要?
Buffer Pool 是 InnoDB 的内存缓存区,缓存数据页和索引页,减少磁盘 IO。命中率越高,查询越快。
3. Redo Log 和 Undo Log 区别是什么?
- Redo Log:保证事务持久性(崩溃恢复)
- Undo Log:保证事务原子性和 MVCC(回滚、快照读)
4. 什么是 WAL(Write-Ahead Logging)?
先写日志再写数据页,崩溃后可通过日志恢复,提升可靠性与吞吐。
5. 什么是 Doublewrite?解决什么问题?
防止页写入“半页损坏”(partial page write)。先写 doublewrite 区,再写表空间页,崩溃时可恢复。
6. MySQL 中的一条 UPDATE 大致经历什么流程?
连接器 → 解析器 → 优化器 → 执行器 → 引擎层更新 Buffer Pool → 写 Undo/Redo → 事务提交(刷日志策略)。
7. 什么是 MVCC?解决了什么问题?
多版本并发控制。让“读不阻塞写、写不阻塞读”(快照读场景),提升并发性能。
8. Read View 是什么?
事务进行快照读时生成的可见性视图,用于判断某版本数据是否可见。
9. 当前读和快照读有什么区别?
- 当前读:读最新版本,并可能加锁(
select ... for update) - 快照读:读历史可见版本(普通
select)
10. RR 隔离级别下,InnoDB 如何避免幻读?
通过 Next-Key Lock(记录锁+间隙锁) 在当前读场景抑制幻读。
11. 什么是 Next-Key Lock?
锁定“记录 + 前后间隙”的组合锁,用于范围条件下防止并发插入造成幻读。
12. 什么是意向锁?有什么作用?
表级锁,表示“事务将对某些行加锁”。作用是协调表锁与行锁,提升锁冲突判断效率。
13. 什么情况下容易发生死锁?
高并发下,事务以不同顺序锁定多行/多表资源时容易死锁。典型:事务A先锁1后锁2,事务B先锁2后锁1。
14. 如何查看最近一次死锁信息?
SHOW ENGINE INNODB STATUS\G
15. 死锁和锁等待超时的区别?
- 死锁:循环等待,InnoDB会主动回滚一个事务
- 锁等待超时:未形成环,但等待超过阈值后报错
16. 如何减少死锁概率?
固定访问顺序、缩短事务、走索引减少锁范围、避免大事务。
17. explain 的 type 至少要达到什么级别?
通常至少要避免 ALL(全表扫描),尽量做到 range/ref/const。
18. Using filesort 一定很差吗?
不一定,但通常表示无法利用索引完成排序。数据量大时开销明显,应优化索引或 SQL。
19. Using temporary 说明了什么?
执行过程中使用了临时表(如复杂 group by/order by),可能带来额外开销。
20. 联合索引设计的核心原则是什么?
高选择性字段优先、尽量覆盖常用 where/order by/group by,遵循最左前缀。
21. 什么是索引下推(ICP)?
在存储引擎层先利用索引条件过滤,减少回表次数,提高查询效率。
22. 什么是 MRR(Multi-Range Read)?
将回表主键做批量/顺序化读取,减少随机 IO,提升范围查询性能。
23. 为什么深分页慢?
LIMIT offset, size 的 offset 很大时,前面记录也要扫描/丢弃。优化常用“游标分页(基于 id)”。
-- 深分页(慢) SELECT * FROM t_msg ORDER BY id LIMIT 100000, 20; -- 游标分页(优) SELECT * FROM t_msg WHERE id < ? ORDER BY id DESC LIMIT 20;
24. 什么是覆盖索引优化分页?
只查索引字段拿到主键,再回表少量数据,降低扫描成本。
25. count(*) 在 InnoDB 为什么可能慢?
InnoDB 不维护精确总行数(事务可见性相关),需要扫描统计。
26. 如何分析 SQL 慢在“CPU 还是 IO”?
结合慢日志、EXPLAIN、系统监控(CPU/IO)综合判断,不能只看 SQL 文本。
27. 什么是慢查询日志?如何查看开关?
SHOW VARIABLES LIKE 'slow_query_log'; SHOW VARIABLES LIKE 'long_query_time';
28. 什么是执行计划“估算不准”?
优化器基于统计信息选计划,统计信息过旧会导致错选索引或执行路径。
29. 如何更新优化器统计信息?
ANALYZE TABLE t_user;
30. Online DDL 是什么?
在线变更表结构,尽量减少锁表时间,降低业务影响(但并非完全零影响)。
31. 大表加索引为什么风险高?
会消耗大量 IO/CPU,可能导致主从延迟、业务抖动。应低峰执行并评估回滚方案。
32. 什么是主从复制的三种线程/流程?
主库 binlog → 从库 IO 线程拉取 relay log → SQL 线程回放执行。(8.0还有并行复制优化)
33. binlog 有哪些格式?
- Statement
- Row(常用)
- Mixed生产常用 Row,复制更安全一致。
34. 为什么会出现主从延迟?
从库回放能力不足、主库大事务、DDL、从库硬件弱、单线程瓶颈(旧版本)等。
35. 如何查看主从复制状态?
SHOW MASTER STATUS; SHOW SLAVE STATUS\G; -- MySQL 8 部分环境为 SHOW REPLICA STATUS\G
36. 什么是 GTID?有什么好处?
全局唯一事务ID,简化故障切换与复制拓扑调整,减少人工对位点操作。
37. 分库分表后带来哪些典型问题?
跨库 join 难、分布式事务复杂、全局 ID、分页排序复杂、运维成本上升。
38. MySQL 如何支持高可用?
常见方案:主从复制 + 自动故障切换(MHA/Orchestrator)+ VIP/代理层(如 ProxySQL)。
39. AI-Agent 场景中 MySQL 优化的高频点有哪些?
会话表按 session_id + created_at 建索引、消息表冷热分层、幂等唯一键、防深分页、读写分离。
40. 面试如何回答“做过 MySQL 进阶优化”?
问题现象(慢/超时)→ 证据(慢日志+EXPLAIN)→ 根因(索引/锁/分页/复制延迟)→ 方案(SQL+索引+架构)→ 结果(耗时、QPS、错误率)。这是最稳的高分答法。
本专栏聚焦 AI-Agent 面试高频考点,内容来自真实面试与项目实践。系统覆盖大模型基础、Prompt工程、RAG、Agent架构、工具调用、多Agent协作、记忆机制、评测、安全与部署优化等核心模块。以“原理+场景+实战”为主线,提供高频题解析、标准答题思路与工程落地方法,帮助你高效查漏补缺.