先看 mysql 的架构图
能够说 mysql 的次要架构分为 server 层和存储引擎层。
连接器 :次要负责用户登录数据库,进行用户的身份认证,包含 校验账户明码,权限等操作,如果用户账户明码已通过,连接器会到权限表中查问该用户的所有权限,之后在这个连贯里的权限逻辑判断都是会依赖此时读取到的权限数据,也就是说,后续只有这个连接不断开,即时管理员批改了该用户的权限,该用户也是不受影响的。
查问缓存
连贯建设后,执行查问语句的时候,会先查问缓存,Mysql 会先校验这个 sql 是否执行过,以 Key-Value 的模式缓存在内存中,Key 是查问预计,Value 是后果集。如果缓存 key 被命中,就会间接返回给客户端,如果没有命中,就会执行后续的操作,实现后也会把后果缓存起来,不便下一次调用。当然在真正执行缓存查问的时候还是会校验用户的权限,是否有该表的查问条件。
Mysql 8.0 版本后删除了缓存的性能,官网也是认为该性能在理论的利用场景比拟少,所以罗唆间接删掉了。
分析器
mysql 没有命中缓存,那么就会进入分析器,分析器次要是用来剖析 SQL 语句是来干嘛的,分析器也会分为几步:
第一步,词法剖析,一条 SQL 语句有多个字符串组成,首先要提取关键字,比方 select,提出查问的表,提出字段名,提出查问条件等等。做完这些操作后,就会进入第二步。
第二步,语法分析,次要就是判断你输出的 sql 是否正确,是否合乎 mysql 的语法。
优化器
优化器的作用就是它认为的最优的执行计划去执行(尽管有时候也不是最优),比方多个索引的时候该如何抉择索引,多表查问的时候如何抉择关联程序等。
执行器
抉择了执行计划后,mysql 就筹备开始执行了,首先执行前会校验该用户有没有权限,如果没有权限,就会返回错误信息,如果有权限,就会去调用引擎的接口,返回接口执行的后果。