SQL查询在MySQL中的执行流程

SQL查询在MySQL中的执行流程

微信搜索 zze_coding 或扫描 👉 二维码关注我的微信公众号获取更多资源推送:

image.png

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

Copyright: 采用 知识共享署名4.0 国际许可协议进行许可

Links: https://www.zze.xyz/archives/mysql-sql-exec-flow.html

Buy me a cup of coffee ☕.