SQL 执行流程
你就记一条完整链路:从写 SQL → 到数据库返回结果,一共这几步。
1. 应用层发起
- Java 代码调用 mapper 方法
- MyBatis 拼接 SQL、参数
- 通过 JDBC 向 MySQL 发送请求
2. 连接器层(Connection)
- 验证账号密码、权限
- 建立连接,拿到执行线程
3. 查询缓存(MySQL 8.0 已去掉)
- 先查缓存有没有相同 SQL
- 命中直接返回
- 没命中继续往下
4. 解析器(Parser)
- 词法分析:拆出关键字(select、from、where...)
- 语法分析:检查 SQL 语法是否合法
- 生成解析树
5. 预处理器(Preprocessor)
- 检查表名、字段名是否存在
- 处理视图、表达式
- 生成新的解析树
6. 优化器(Optimizer)
- 决定走哪个索引
- 决定 join 顺序
- 生成最优执行计划
7. 执行器(Executor)
- 调用存储引擎接口
- 先查缓冲池(Buffer Pool)
- 不命中再去磁盘加载数据
8. 存储引擎
- InnoDB 负责实际数据读取/写入
- 返回结果给执行器
9. 结果返回
- 依次返回客户端
- MyBatis 封装成 Java 对象(List/Bean)
面试一句话背诵版
SQL 流程是:应用通过 JDBC 发送 SQL → 连接器鉴权 → 解析器语法解析 → 预处理器校验 → 优化器生成执行计划、选择索引 → 执行器调用存储引擎查询数据 → 最后结果返回并由 MyBatis 映射成 Java 对象。