腾讯MySQL面试深度解析:索引、事务与高可用实践 (二)

91 阅读4分钟

在腾讯等大厂的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底层机制,以及容灾与集群方案,将帮助在面试中脱颖而出。