内容简介:mysql 主要由, server层和存储层两部分构成.server 层主要包括连接器, 查询缓存, 分析器, 优化器, 执行器连接器主要负责将mysql 客户端和服务端建立连接,会获取当前用户的权限. 这里获取到的权限对整个连接都有效,一旦连接成功后,如果使用管理员账号对用户更改查询,在当前连接中拥有的权限保持不变,值有等到下次重新连接才会更新权限
select student.id as studentId, student.name as studentName, student.age as studentAge, student.sex as studentSex, dept.name as deptName from student left join dept on student.deptId = dept.id where student.id = '1' order by student.age desc 复制代码
sql **执行过程
mysql 主要由, server层和存储层两部分构成.
server 层主要包括连接器, 查询缓存, 分析器, 优化器, 执行器
连接器
连接器主要负责将 mysql 客户端和服务端建立连接,会获取当前用户的权限. 这里获取到的权限对整个连接都有效,一旦连接成功后,如果使用管理员账号对用户更改查询,在当前连接中拥有的权限保持不变,值有等到下次重新连接才会更新权限
查询缓存
连接成功之后,即开始要正式执行 select
语句了, 但是在执行查询之前, mysql
会去看下有没有该条语句的查询缓存内容,如果有缓存 直接从缓存中读取并返回结果, 不需要在执行后面的步骤, 结束查询操作. 如果没有缓存则接着往后执行,并将执行语句和结果保存到缓存中
注意: mysql8
之后已经没有这个功能了, 因为这个缓存区太容易刷新,效果并不是太大
解析器
当没有查询到缓存, 就需要开始执行 sql
语句了, 在执行之前肯定需要对 sql
语句进行解析.
分析器主要对 sql 语句进行语法和语义分析, 检查单词拼写是否错误, 还有检查要查询的表或字段是否存在,如果分析器检测出有错误就会返回类似 "you have an error in you sql "
这样的错误信息,并结束查询操作.
优化器
当通过分析器之后, mysql
算是理解了你要执行的操作,但是通常对于一个 sql
, mysql
内部可能存在多种执行方案,比如存在多个索引,该选择哪个索引,多个表关联查询,怎么确认各个表的连接顺序.
多个方案的执行结果都一样,但是执行效率不一样,所以mysql在执行之前需要尝试找出最优方案来,这就是优化器主要工作
执行器
当经过优化器后,就到了执行器执行sql了. 在前面连接器处已经读取到当前用户的权限了, 连接器中只是获取到权限,并没有对权限进行判断和效验.
所以在执行器中, 在执行语句之前会判断权限, 如果没有对应的权限则会直接返回并提示没有相关权限.
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
猜你喜欢:- 面试:谈谈你对 MyBatis 执行过程之 SQL 执行过程理解
- MySQL -- SELECT 执行过程
- mysql 内部的执行过程
- Redis 命令执行过程(上)
- Redis 命令执行过程(下)
- 源码分析OKHttp的执行过程
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。