
书: https://pan.baidu.com/s/1A6ZLSPMbCiZ-L4eRucUvXQ?pwd=kt7i
一、基础架构
- “MySQL服务端分为Server层(连接器、分析器、优化器、执行器)和存储引擎层(InnoDB、MyISAM等),插件式架构允许动态切换引擎。”
- “一条SQL的执行流程:连接→查询缓存(8.0已移除)→解析→优化→执行→返回结果。”
二、InnoDB存储引擎
- “InnoDB的数据以页(16KB)为单位存储,页是磁盘I/O的最小单位,通过B+树索引组织数据。”
- “缓冲池(Buffer Pool)是内存中的写缓冲,采用LRU算法管理热数据,减少磁盘访问。”
- “redo log(重做日志)保证事务持久性,写日志顺序IO比随机写数据页更快,WAL(Write-Ahead Logging)机制的核心。”
三、索引原理
- “B+树索引的叶子节点存储完整数据(聚簇索引)或主键值(二级索引),非叶子节点仅存键值和指针。”
- “最左前缀原则:联合索引(a,b,c)生效条件需包含最左列(如
a=1 AND b>2
),跳跃扫描是例外优化。” - “索引下推(ICP):5.6+版本允许在存储引擎层过滤数据,减少回表次数。”
四、事务与锁
- “ACID特性通过undo log(原子性)、redo log(持久性)、锁(隔离性)、MVCC(一致性)实现。”
- “MVCC(多版本并发控制)依赖隐藏字段(trx_id、roll_pointer)和ReadView实现快照读,避免读写阻塞。”
- “锁类型:行锁(Record Lock)、间隙锁(Gap Lock,解决幻读)、临键锁(Next-Key Lock = Record+Gap)。”
五、性能优化
- “EXPLAIN输出解读:
type
列(ALL→index→range→ref→const为性能升序),rows
预估扫描行数。” - “覆盖索引(Covering Index)指查询列全部在索引中,避免回表,如
SELECT id FROM table WHERE name=?’
。”
六、日志系统
- “binlog(逻辑日志)用于主从复制和数据恢复,三种格式:STATEMENT(语句)、ROW(行变更)、MIXED。”
- “两阶段提交保证redo log与binlog的一致性:Prepare阶段→写binlog→Commit阶段。”
七、高可用设计
- “主从复制原理:主库写binlog→从库I/O线程拉取→SQL线程重放,延迟问题可通过GTID或半同步缓解。”
八、故障排查
- “死锁检测:
SHOW ENGINE INNODB STATUS
查看LATEST DETECTED DEADLOCK
,分析事务等待链。”
九、设计规范
- “大表ALTER TABLE操作推荐使用pt-online-schema-change工具,避免锁表阻塞。”
十、底层机制
- “InnoDB的行记录格式:COMPACT(5.1默认)、DYNAMIC(5.7+,溢出列存储更高效)。”
- “自增主键并非连续增长:事务回滚、批量插入等场景可能导致空洞。”