侧边栏壁纸
博主头像
张种恩的技术小栈博主等级

行动起来,活在当下

  • 累计撰写 748 篇文章
  • 累计创建 65 个标签
  • 累计收到 39 条评论

目 录CONTENT

文章目录

SQL查询在MySQL中的执行流程

zze
zze
2020-04-29 / 0 评论 / 0 点赞 / 486 阅读 / 680 字

image.png

  1. 客户端通过 MySQL 协议发起 SQL 查询请求,MySQL Server 从线程池中分配一个连接线程与客户端建立连接;
  2. MySQL 连接线程接收到客户端发送的 SQL 语句,对该语句进行 hash,以 hash 后的结果为 key 在查询缓存中寻找对应的 value,如果存在该 value 则直接返回结果,否则则继续下一步;
  3. 如果未在查询缓存中找到对应 SQL 的结果集,则继续将 SQL 交给解析器进行解析,并生成一颗解析树;
  4. 解析树被预处理器预处理,由解析树生成了可以访问数据的执行路径;
  5. 查询优化器对生成的执行路径进行评估,挑选出一条最优路径,并且尝试着对这条最优路径再次进行改写,以加速其执行性能;
  6. 查询优化器将优化完的执行请求提交给查询执行计划,排队;
  7. 每一个查询执行计划由查询执行引擎负责具体的执行,通过 API 调用通过存储引擎从磁盘中取到相应的数据,而后在查询引擎中做过滤;
  8. 查询执行引擎将过滤后的结果返回给客户端,如果该查询的查询结果是确定的,并且符合缓存条件,则先将该查询结果缓存到查询缓存中一份,再返回给客户端,否则直接返回给客户端;
0

评论区