SQL 执行流程

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 对象。

相关推荐
@insist12332 分钟前
信息安全工程师-数据库安全全体系解析与最佳实践
数据库·安全·软考·信息安全工程师·软件水平考试
_ku_ku_2 小时前
数据库系统原理 · 事务管理与恢复 · 自学总结
数据库·oracle
lifewange3 小时前
Redis 集合(Set)运算完全指南
数据库·chrome·redis
TDengine (老段)3 小时前
TDengine RAFT共识协议 — 选举、日志复制、快照与仲裁
android·大数据·数据库·物联网·架构·时序数据库·tdengine
Full Stack Developme4 小时前
Spring Boot 事务管理完整教程
java·数据库·spring boot
m0_702036536 小时前
mysql如何通过索引减少行锁范围_mysql索引与加锁逻辑
jvm·数据库·python
qxwlcsdn6 小时前
如何用 IndexedDB 存储从 API 获取的超大列表并实现二级索引
jvm·数据库·python
phltxy6 小时前
Redis 主从复制
java·数据库·redis
2301_809244536 小时前
C#怎么使用协变和逆变 C#泛型中的in和out关键字协变逆变是什么意思怎么用【语法】
jvm·数据库·python
知识汲取者6 小时前
巨量引擎营销 API 完整文档
开发语言·数据库·python