MySQL 8.0 SQL 执行流程
首先我们先来看下 MySQL 的经典架构图,8.0 的没怎么翻到,先看看这个了。
图上有这么几个模块:
Collectos
连接器,客户端可以通过这些方式对 MySQL 服务端发起通信。
Services & utilities
?
Connection pool
连接池,负责连接的处理、安全和认证,比如我们的请求线程的新建、密码认证、权限获取都是由这个模块负责。这里缓存了权限,所以当你不断开连接,其他用户修改权限后,当前的连接的权限也不会改变。
SQL Interface
MySQL 的接口
Parser
语法解析器,将我们的 SQL 语句解析成相关的语法树。解析器先提取相应的关键词,然后进行语法解析,判断 SQL 是否符合相应的语法,然后生成语法树,上面拆分了 SQL 的各种成分,比如查询字段、查询表、匹配条件等。
Optimzer
优化器,将 SQL 进行优化生成多个执行计划。
执行器
上面优化器生成了多份执行计划后,接下来就由执行器选择一份计划执行了。执行器先会判断当前是否具有权限,然后才会去执行相应的 SQL 语句。
Caches
缓存命中,8.0 中已经被干掉了。作用是在每次查询时将结果缓存,然后再次查询可以加快访问速度,但是因为命中率太低,有点鸡肋所以在 MySQL 8.0已经不存在了。比如他是将 SQL 语句作为 key 进行命中匹配的,如果 SQL 中多加了一个空格也会被认为不是同一条 SQL 导致匹配不到。
Pluggable storage Engines
数据库的执行引擎插件。
文件系统
这个是存放 MySQL 的文件系统。
SQL 执行流程
SQL 流程是 SQL --> 解析器 --> 优化器 --> 执行器 --> 返回结果。
下面会将各个组件单独拉出来做分析。
我正在参与2023腾讯技术创作特训营第三期有奖征文,组队打卡瓜分大奖!