2026-04-25 23:57:24
Alibaba的MySQL面试题涉及事务特性、并发与隔离级别、存储引擎区别、查询执行顺序、索引类型与优化、锁机制、数据库设计范式、读写分离与主从复制、性能调优等多个核心知识点,全面考察候选人对MySQL的深入理解与实战能力。 以下是部分关键问题的解析:
事务四大特性(ACID)原子性(Atomicity)事务包含的所有操作要么全部成功,要么全部失败回滚。例如,A向B转账时,若操作失败,A的账户余额不应减少。
一致性(Consistency)事务开始前和结束后,数据库的完整性约束未被破坏。例如,转账后,A和B的总金额应保持不变。
隔离性(Isolation)多个并发事务之间相互隔离,避免干扰。例如,A取钱时,B不能同时向该账户转账。
持久性(Durability)事务一旦提交,对数据的改变是永久性的,即使系统故障也不会丢失。

读未提交(Read Uncommitted)可能读到其他事务未提交的数据(脏读)。例如,A读取了B未提交的更新数据,若B回滚,A读到的数据无效。
不可重复读(Non-repeatable Read)同一事务内多次读取同一数据,结果可能不一致。例如,A第一次读取某行数据后,B更新了该行并提交,A再次读取时结果不同。
幻读(Phantom Read)同一事务内多次查询,结果集可能不同(新增或删除行)。例如,A第一次查询某表有5行,B插入一行并提交后,A再次查询变为6行。
串行化(Serializable)最高隔离级别,完全避免并发问题,但性能最低。
MySQL默认隔离级别为可重复读(Repeatable Read),通过多版本并发控制(MVCC)实现,避免脏读和不可重复读,但可能发生幻读。
存储引擎区别InnoDB支持事务、行级锁、外键约束,适合高并发写入场景(如订单系统)。
MyISAM不支持事务,表级锁,查询速度快,适合读多写少场景(如日志系统)。
MEMORY数据存储在内存中,读写极快,但服务器重启后数据丢失,适合临时表或缓存。
B+Tree索引适合范围查询和排序,如WHERE age > 20 ORDER BY name。
Hash索引适合等值查询,如WHERE id = 100,但不支持范围查询。
聚集索引表数据按索引顺序存储,如InnoDB的主键索引。
非聚集索引表数据与索引分开存储,如MyISAM的索引。
优化建议:

乐观锁通过版本号(如version字段)实现,适合读多写少场景。例如,更新时检查版本号是否变化。
悲观锁通过SELECT ... FOR UPDATE实现,适合写多读少场景。例如,转账时锁定相关账户。
死锁解决
设置合理的锁超时时间(innodb_lock_wait_timeout)。
按固定顺序访问表和行,避免交叉锁定。
使用SHOW ENGINE INNODB STATUS分析死锁日志。
查询优化
避免SELECT *,只查询必要字段。
使用LIMIT 1优化“只需一行”的查询。
拆分大DELETE或INSERT语句,减少锁持有时间。
存储优化
使用ENUM代替VARCHAR存储固定值(如性别)。
将IP地址存储为UNSIGNED INT,节省空间并加快查询。
垂直分割大表,减少单表字段数。
配置优化
调整innodb_buffer_pool_size(通常设为物理内存的50%-70%)。
启用慢查询日志(slow_query_log),定位性能瓶颈。

Alibaba的MySQL面试题覆盖了从基础理论到高级优化的全方位知识点,要求候选人不仅熟悉语法,还需深入理解底层原理(如事务隔离、锁机制、索引结构)和实战经验(如性能调优、死锁处理)。掌握这些内容后,可显著提升数据库设计、查询优化和故障排查能力。