2020406——数据库 mysql的语句执行过程 五

在这里插入图片描述
连接数据库
客户端发起一条Query请求,服务器端的‘连接管理模块’接收请求。
将请求转发到‘连接进/线程模块’。
调用‘用户模块’来进行授权检查。
通过检查后,‘连接进/线程模块’从‘线程连接池’中取出空闲的被缓存的连接线程和客户端请求对接,如果失败则创建一个新的连接请求。

处理请求

查询缓存

通过一个大小写敏感的哈希查找判断查询是否命中查询缓存的数据。
命中查询缓存,用户权限没有问题,MySQL直接从缓存中拿结果返回给客户端。

查询优化处理 解析SQL、预处理、优化SQL的执行计划,将SQL转化成一个执行计划。

解析和预处理

生成一棵解析树(《编译原理》的知识),MySQL按照其语法对解析树进行验证和解析查询。判断语法是否合法。这里可以对比一下存储过程和 PHP 或者 Java 的预处理过程,它们就是因为存储了预处理过程的结果,所以可以达到 SQL 的拼接和提高一些效率。

优化器和执行计划

将语法树转化为执行计划(子任务),并选择成本尽量小的执行计划。

**查询执行引擎 **

询执行引擎则根据执行计划来完成整个查询。在执行计划时,存储引擎通过调用实现的接口来完成。

返回结果

如果查询可以被缓存,MySQL将结果存放到查询缓存里。

MySQL将结果集返回给客户端是一个逐步返回的过程;数据库开始产生第一个结果时,就可以开始向服务器返回结果集。

使用MySQL客户端、服务器通信协议进行封包。 通过Tcp协议传输数据。

发布了955 篇原创文章 · 获赞 43 · 访问量 8万+

猜你喜欢

转载自blog.csdn.net/qq_36344771/article/details/105386031