MySQL 架构分为三层:连接层、SQL 层、存储引擎层。
存储引擎是插件式的,InnoDB 是默认引擎。
MySQL 就像餐厅:前厅服务(连接处理),厨师做菜(SQL执行),后厨食材(存储引擎)。你换厨师不影响大厅。
InnoDB 使用页(默认16KB)来管理数据。
主键默认建聚簇索引,数据就按主键存。
辅助索引只存主键值。
想象数据是一本字典,主键就是页码,查其他字段要先看目录再翻页(回表)。
索引结构是 B+树。
支持联合索引,最左前缀法则重要。
覆盖索引能避免回表。
索引是“树形导航目录”,找数据像查高速路口,最左边的字母必须先写上。
SQL 执行步骤:解析 → 预处理 → 优化 → 执行
优化器会选择最便宜的执行路径(基于统计信息)
执行 SQL 就像点菜:先识别你说的是什么(解析)、再找原材料(预处理)、选最省事的做法(优化)、最后上菜(执行)
支持行锁、表锁、意向锁。
InnoDB 默认是行锁 + MVCC。
事务之间的冲突靠锁解决。
锁就像厕所的门牌——谁在用、用的是大号还是小号,一眼就能看出来。
事务四大特性 ACID。
undo log 用于回滚,redo log 保证写入持久。
二阶段提交:先 redo prepare,再写 binlog。
数据写入像买房:先签意向书(prepare redo),再网签(binlog),两者都写完才算成交。
优化器选执行计划,基于“代价模型”。
影响优化器的有索引、统计信息、写法。
优化器就像你妈做饭,会选最省火、最快熟、又不难吃的做法。
优化手段:加索引、减少回表、分页优化(如 where id > 1000)
常用工具:EXPLAIN、慢查询日志、SHOW PROFILE
优化 SQL 就像减肥——吃得少(少字段)、吃得快(加索引)、动得巧(写法对)
主从复制基于 binlog。
支持 GTID(全局事务 ID)追踪。
延迟复制、半同步复制增强稳定性。
MySQL 自身非分布式,用中间件实现 Sharding。
MySQL Group Replication、TiDB 是常见方案。
Buffer Pool
Redo Log / Undo Log
Double Write Buffer
自适应哈希索引
Begin
执行 SQL
写 undo log
写 redo prepare
写 binlog
redo commit
表锁 / 行锁
共享锁 / 排它锁
意向锁(IS/IX)
死锁检测方式
Gap Lock / Next-Key Lock