- 客户端通过 MySQL 协议发起 SQL 查询请求,MySQL Server 从线程池中分配一个连接线程与客户端建立连接;
- MySQL 连接线程接收到客户端发送的 SQL 语句,对该语句进行 hash,以 hash 后的结果为 key 在查询缓存中寻找对应的 value,如果存在该 value 则直接返回结果,否则则继续下一步;
- 如果未在查询缓存中找到对应 SQL 的结果集,则继续将 SQL 交给解析器进行解析,并生成一颗解析树;
- 解析树被预处理器预处理,由解析树生成了可以访问数据的执行路径;
- 查询优化器对生成的执行路径进行评估,挑选出一条最优路径,并且尝试着对这条最优路径再次进行改写,以加速其执行性能;
- 查询优化器将优化完的执行请求提交给查询执行计划,排队;
- 每一个查询执行计划由查询执行引擎负责具体的执行,通过 API 调用通过存储引擎从磁盘中取到相应的数据,而后在查询引擎中做过滤;
- 查询执行引擎将过滤后的结果返回给客户端,如果该查询的查询结果是确定的,并且符合缓存条件,则先将该查询结果缓存到查询缓存中一份,再返回给客户端,否则直接返回给客户端;
版权归属:
zze
许可协议:
本文使用《署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0)》协议授权
评论区