在腾讯等大厂的MySQL面试中,考官常从索引优化、事务控制、SQL执行原理以及高可用架构等角度考察候选人。本文围绕这些核心知识点进行系统梳理,并对面试中可能问到的问题进行详细解答。
一、索引相关
编辑
1. 辅助索引的叶子上有什么内容?辅助索引和主键索引性能差距在哪里?
-
辅助索引(Secondary Index)叶子内容 :
辅助索引的叶子节点存储的是对应行的主键值 ,而不是整行数据。InnoDB中,辅助索引需要通过主键回表(clustered index)找到实际数据。
编辑 -
性能差距 :
-
**主键索引(聚集索引)**直接存储数据,查询效率高,尤其是范围查询。
-
辅助索引查询时需要先找到索引叶子节点的主键,再回表查询数据,增加一次IO开销。
-
---
编辑
2. 索引总结
- B+树索引:最常用,支持快速查找、范围查询。叶子节点链表支持顺序访问。
- 哈希索引:只适合等值查询,不支持范围查询,MySQL的Memory引擎用得多。
- 全文索引:适合文本搜索,通过倒排索引实现。
- 索引优化技巧 :
- 尽量使用最左前缀索引 。
- 避免对索引列使用函数或表达式。
- 对高基数字段建立索引效果好。
二、事务与ACID
3. 数据库事务性质与并发一致性问题
编辑
-
事务的四大性质(ACID) :
-
Atomicity(原子性) :事务内操作要么全部成功,要么全部回滚。
-
Consistency(一致性) :事务执行前后,数据库状态保持一致。
-
Isolation(隔离性) :并发事务之间互不干扰。
-
Durability(持久性):事务提交后,数据永久保存,即使系统崩溃也不会丢失。
-
-
并发一致性问题 :
-
脏读(Dirty Read) :读取未提交事务的数据。
-
不可重复读(Non-Repeatable Read) :同一查询在一个事务中结果不同。
-
幻读(Phantom Read) :同一条件查询,返回的行数不同。
-
-
解决方式 :通过事务隔离级别(READ UNCOMMITTED、READ COMMITTED、REPEATABLE READ、SERIALIZABLE)及MVCC实现。
4. 事务的ACID解释
- Atomicity(原子性):通过回滚日志(undo log)保证。
- Consistency(一致性):依赖约束、触发器和应用逻辑。
- Isolation(隔离性):通过锁(行锁、表锁)和MVCC保证。
- Durability(持久性):依赖redo log和磁盘刷新机制。
三、SQL操作与执行原理
5. 数据库存储过程、视图、函数的使用,几种连接方式
- 存储过程:封装一系列SQL操作,提高复用性和性能,减少网络开销。
- 视图:虚拟表,用于封装复杂查询逻辑,便于维护。
- 函数:返回单值或表值,方便计算与查询中复用逻辑。
- 连接方式 :
- INNER JOIN :返回两表匹配的数据。
- LEFT/RIGHT JOIN :返回左表/右表所有数据及匹配数据。
- CROSS JOIN :笛卡尔积。
- SELF JOIN:表与自身连接。
6. 数据库的JOIN操作底层实现
- Nested Loop Join(嵌套循环):两表嵌套循环匹配,适合小表和索引覆盖场景。
- Sort Merge Join(排序合并):两表先排序,再合并匹配,适合大表。
- Hash Join(哈希连接):一表构建哈希表,另一表匹配,MySQL优化器有时使用。
7. LIMIT a,b 的含义与性能问题
- 含义:从第 a 条记录开始,取 b 条数据。
- 性能问题 :当 a 很大时,MySQL仍需遍历前 a 条数据再定位到第 a 条,导致扫描开销大。优化方式:可通过索引范围查询 + LIMIT 或 **延迟关联(subquery)**等手段减少扫描行数。
四、数据库高可用与容灾
8. 数据库容灾问题
- 数据库挂了怎么办 :
- 使用主从复制 :从库接管查询服务。
- 自动故障转移(MHA, Orchestrator) :故障自动切换主库。
- 定期备份 :全量+增量备份,恢复数据库。
- 监控告警:实时监控数据库状态,快速响应。
9. 数据库集群实现数据一致性
- 主从复制(异步/半同步):保证从库最终一致。
- Paxos/Raft协议:分布式数据库通过共识算法保证强一致性。
- MySQL Group Replication / InnoDB Cluster:通过组复制实现读写分离及高可用,确保一致性。
总结
腾讯面试中,MySQL不仅考察基础知识,还考察性能优化能力、事务理解、SQL执行原理和高可用架构能力。熟悉索引原理、ACID、JOIN底层机制,以及容灾与集群方案,将帮助在面试中脱颖而出。