graph TB
subgraph "SQL Layer"
A["Parser"] --> B["Preprocessor"]
B --> C["Optimizer"]
C --> D["Executor"]
end
subgraph "Storage Engine<br/>InnoDB"
D --> E["Buffer Pool"]
E --> F["Redo Log"]
E --> G["Undo Log"]
E --> H["Data File"]
D --> I["Change Buffer"]
end
subgraph "OS Layer"
H --> J["Page Cache"]
F --> K["I/O Subsystem"]
G --> K
end
style A fill:#4FC08D,color:#fff
style C fill:#FF9F43,color:#000
style E fill:#00B6BC,color:#fff
style F fill:#EE5A24,color:#fff
style G fill:#C44569,color:#fff
style H fill:#A0AEC0,color:#fff
[!NOTE] InnoDB 的核心缓冲机制
Buffer Pool:热数据页的内存缓存,命中率应在 99%+
Redo Log:保证 durability,循环写入,崩溃恢复时使用
Undo Log:支持 MVCC 和多版本读,rollback 也用它
三、SQL 精解
#
主题
说明
3.1
[DDL — 建表与结构变更](./10-DDL 建表与结构变更.md)
CREATE TABLE / ALTER TABLE、ADD COLUMN 在线变更、ALGORITHM=INPLACE
3.2
[DML — 增删改](./11-DML 增删改.md)
INSERT ... ON DUPLICATE KEY UPDATE、REPLACE INTO、DELETE vs TRUNCATE
3.3
[DQL — SELECT 全解析](./12-DQL SELECT 全解析.md)
SELECT 执行顺序、DISTINCT、GROUP BY 优化、LIMIT 深分页问题
3.4
[JOIN 原理与优化](./13-JOIN 原理与优化.md)
Inner / Left / Right / Cross JOIN、Index Merge、Nested Loop Join、Block Nested Loop
flowchart LR
A["SELECT 语句"] --> B["Parse Tree"]
B --> C["Query Optimizer"]
C --> D["Execution Plan"]
D --> E{type}
E -->|"system"<| F["最优:只有1行"]
E -->|"const"<| G["常量访问"]
E -->|"eq_ref"<| H["唯一索引,每行1次"]
E -->|"ref"<| I["非唯一索引,多行匹配"]
E -->|"range"<| J["索引范围扫描"]
E -->|"index"<| K["全索引扫描"]
E -->|"ALL"<| L["全表扫描 ⚠️"]
style L fill:#EE5A24,color:#fff
style F fill:#00B6BC,color:#fff
sequenceDiagram
participant T1 as Transaction A
participant DB as InnoDB Engine
participant T2 as Transaction B
T1->>DB: BEGIN;
T2->>DB: BEGIN;
T1->>DB: SELECT balance FROM accounts WHERE id=1;
Note over T1,DB: 一致性读 → 返回历史版本(快照)
T2->>DB: UPDATE accounts SET balance=100 WHERE id=1;
T2->>DB: COMMIT;
T1->>DB: SELECT balance FROM accounts WHERE id=1 FOR UPDATE;
Note over T1,DB: 当前读 → 读取最新已提交记录 + X锁
T1->>DB: COMMIT;