01 一条 SQL 的执行
一条 SQL 的执行
一条主键 SELECT 从 Server 层进入 InnoDB:先得到执行计划,再通过引擎接口读取索引记录与可见版本。
版本:MySQL Community Server 26.10.0(InnoDB);核实日期:2026-11-12。官方在线文档可能继续更新,源码链接固定到对应发布标签。图为原理抽象,省略非本页重点。
specification {
element actor { style { shape person; color amber } }
element system { style { color muted } }
element component { style { color primary } }
element storage { style { shape storage; color green } }
}
model {
c = actor '客户端'
s = component '连接 / SQL 前端'
o = component '优化器'
e = component '执行器'
inn = component 'InnoDB'
bp = storage 'Buffer Pool / 表空间'
}
views {
dynamic view index {
title '核心链路'
variant sequence
c -> s 'SELECT ... WHERE id = ?'
s -> s '认证会话、解析与语义检查'
s -> o '解析后的查询与统计信息'
o -> e '选择访问路径并生成执行计划'
e -> inn '经 handler 接口发起索引读取'
inn -> bp '定位索引页,未命中时读盘'
inn -> e '按隔离级别返回可见记录'
e -> c '过滤 / 投影并返回结果'
}
}
关键判断
- 示例只画 InnoDB 主键点查;连接认证发生在会话建立时,权限还需在相应执行阶段检查。
- 优化器决定索引与连接顺序等访问策略,执行器按计划拉取记录;不是每条 SQL 都会使用索引。
- 普通一致性读可能沿 undo 版本链找可见记录;锁定读与 DML 的锁、当前读语义需要另外区分。
边界
省略预处理语句、存储程序与复杂 JOIN;MySQL 已没有旧版 query cache,不应在图中插入查询缓存命中捷径。