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,不应在图中插入查询缓存命中捷径。

官方出处与源码

回到首页 · 下一篇