hello大家好😊
上一篇文章里我们了解了MySQL服务器三层架构和其中的连接层(Connection layer)
文章链接在这里【MySQL】MySQL服务器架构之Connection layer(连接层)
这篇文章带大家了解MySQL服务器架构之SQL layer(SQL层)
SQL层组件
在建立连接后,MySQL 会在 SQL 层处理每个查询(这里的查询是个总的说法,包括增删改查)。
SQL语句处理流程为:解析SQL语句 --> 验证权限 --> 优化 --> 执行 --> 日志记录
根据这个流程, SQL 层包含了以下组件:
Parser(解析器)
解析器负责验证查询的语法和语义,并将其转换为标准形式。当客户端发送一个查询到服务器时,解析器首先对查询进行解析,确保其语法正确,并检查查询中引用的表、列等对象是否存在。如果查询语法有误或引用的对象不存在,解析器会返回相应的错误消息
Authorization(授权)
授权组件验证连接的用户是否被允许执行该查询,并且是否拥有足够的权限来访问查询涉及的对象。在MySQL中,每个用户都有自己的权限,这些权限控制了他们能够对数据库执行哪些操作。在执行查询之前,服务器会检查连接的用户是否具有执行该查询的权限,以及是否对相关表、列等对象具有足够的权限
Optimizer(优化器)
优化器负责为每个查询创建一个最优的执行计划。执行计划是执行查询时的指令序列(其实就是找到数据的路径),涉及决定使用哪些索引以及以何种顺序处理表等。
就和我们日常导航一样,导航系统会提供给我们基于不同需求的路径,我们可以选择最短时间路径,也可以选择最短距离路径等等。
优化器的目标是找到最高效的执行计划,以最小化查询的执行时间和资源消耗。优化器使用统计信息和数据库的索引信息等来做出决策。也就是说,收集数据库历史统计信息便于优化器创建型的执行计划
Query Execution(查询执行)
查询执行组件根据优化器生成的执行计划执行查询。执行计划通常由一系列操作指令组成,涉及数据检索、数据修改等操作。查询执行的过程中,数据库服务器从磁盘读取数据,对数据进行处理,并将结果返回给客户端
Query Logging(查询日志记录)
查询日志记录组件负责记录服务器接收到或执行的查询。查询日志对于数据库管理员来说是非常重要的工具,它可以用于监视数据库的运行状况、分析查询性能,以及进行故障排查和审计等
前两个组件(解析器和授权)通常在内存中进行处理。对于其他三个组件(优化器、查询执行和查询日志记录),它们涉及到更多与实际数据交互的操作,因此需要涉及磁盘和内存之间的数据读取和处理
但在实际执行过程中,MySQL 会尽可能地将频繁访问的数据块缓存到内存中,以提高查询的执行效率。优化器和查询执行过程中的磁盘访问也受到索引的使用和磁盘缓存的影响。MySQL 通过综合使用内存和磁盘,以及优化数据的访问方式,提供高效的查询处理和性能
感谢 💖
好啦,这次的分享就到这里,感谢大家看到这里🤞