MySQL 核心概念
- 关系型数据库(RDBMS)
- 基于 Client / Server 架构
- SQL 是交互语言
- 存储引擎可插拔
Client
↓
连接层(Connection)
↓
SQL 层(Parser / Optimizer / Executor)
↓
存储引擎层(InnoDB / Memory / MyISAM)
↓
磁盘(Data / Redo / Binlog)
各层职责一句话:
| 层 |
作用 |
| 连接层 |
管理连接、线程、认证 |
| SQL 层 |
解析 SQL、生成执行计划 |
| 引擎层 |
数据存储、事务、锁 |
| 磁盘层 |
持久化、日志 |
| 特性 |
说明 |
| 事务 |
支持 ACID |
| 行级锁 |
高并发 |
| MVCC |
非阻塞读 |
| 崩溃恢复 |
Redo / Undo |
| 聚簇索引 |
主键即数据 |
👉 MySQL 8.4 默认 & 唯一主流引擎
| 对比 |
InnoDB |
MyISAM |
| 事务 |
✅ |
❌ |
| 锁 |
行锁 |
表锁 |
| 崩溃恢复 |
✅ |
❌ |
| 外键 |
✅ |
❌ |
| COUNT(*) |
慢 |
快 |
| 字母 |
含义 |
| A |
原子性 |
| C |
一致性 |
| I |
隔离性 |
| D |
持久性 |
| 特性 |
实现机制 |
| 原子性 |
Undo Log |
| 一致性 |
程序 + 约束 |
| 隔离性 |
锁 + MVCC |
| 持久性 |
Redo Log |
| 隔离级别 |
脏读 |
不可重复读 |
幻读 |
| READ UNCOMMITTED |
✅ |
✅ |
✅ |
| READ COMMITTED |
❌ |
✅ |
✅ |
| REPEATABLE READ(默认) |
❌ |
❌ |
❌* |
| SERIALIZABLE |
❌ |
❌ |
❌ |
InnoDB 使用 Next-Key Lock 解决幻读
- 表锁
- 行锁(Record Lock)
- 间隙锁(Gap Lock)
- Next-Key Lock
| 锁 |
场景 |
| S 锁 |
共享读 |
| X 锁 |
排他写 |
| 意向锁 |
提高判断效率 |
- 未走索引 -> 行锁变表锁
- 范围查询 -> Next-Key Lock
多版本并发控制,让读不阻塞写,写不阻塞读
| 组件 |
作用 |
| Undo Log |
保存历史版本 |
| Read View |
事务可见性 |
| trx_id |
事务 ID |
| 类型 |
示例 |
| 快照读 |
SELECT |
| 当前读 |
SELECT … FOR UPDATE |
排序好的数据结构(B+Tree)
- 主键索引(聚簇)
- 二级索引
- 唯一索引
- 联合索引
- 覆盖索引
- 最左前缀失效
- 函数 / 隐式转换
- %like
- OR
SELECT * FROM user WHERE id = 10;
执行流程:
- 连接验证
- SQL 解析
- 生成执行计划
- 权限检查
- 执行器调用引擎
- 读取数据
- 返回结果
| 对比 |
Redo |
Binlog |
| 层级 |
引擎 |
Server |
| 粒度 |
页 |
逻辑 |
| 作用 |
崩溃恢复 |
复制 / 恢复 |
主库写 -> Binlog
↓
从库 IO 线程拉取
↓
SQL 线程回放
- 主从复制
- 半同步复制
- MGR(Group Replication)
- InnoDB Cluster
- ProxySQL / Keepalived
| 指标 |
意义 |
| QPS |
吞吐 |
| TPS |
事务 |
| Threads_running |
并发 |
| Buffer Pool Hit |
内存命中 |
| IO Util |
磁盘压力 |
MySQL = SQL 层负责“算”,InnoDB 负责“存”,
事务靠日志,性能靠索引,并发靠锁和 MVCC,
稳定靠复制和备份。