基本架构图
Mysql主要分为Server层和存储引擎层两个部分
- Server层包括:连接器,查询缓存,分析器,优化器,执行器;
- 存储引擎层:主要用来做数据存储和提取,并且家都是插件式的,支持InnoDB MyISAM等多个存储引擎。
接下来是具体的执行步骤:
- 连接器:
连接器主要负责于客户端进行连接,获取权限,维持和管理连接。
一般是当用户密码认证确认后,连接器回到权限里面查询出你拥有的权限,之后的操作都会依赖此时读到的权限
- 查询缓存(MySQL8.0版本查询缓存功能移除) :
首先是MySQL拿到查询请求后,会先到查询缓存检查,之前是否执行过,如果执行过就会将执行的语句和结果以key-value(key是查询的语句,calue是查询的结果)键值对的形式,被直接缓存在内存中。
如果语句不在缓存中会执行后面的执行阶段,执行结果会被存入查询缓存中。如果命中查询缓存,MySQL‘不需要执行后面的复杂操作,就可以直接返回结果,效率会很高。
但是查询缓存往往不建议使用,因为它往往弊大于利:查询缓存的失效非常频繁,只要对一个表进行更新,那么这个表中所有的查询缓存都会被清空。因此很可能我们辛辛苦苦存起来的数据,就都被一个更新清空了。对于数据压力比较大的数据库来说,是不可取的。
- 分析器:
如果没有命中查询缓存,那么接下来就要进行执行语句了,首先要对SQL语句进行解析。
分析器的作用是进行词法分析,语法分析:词法分析是指MySQl需要识别你输入的SQL语句里面的字符串分别是什么,代表什么。语法分析的作用一般是用来检查语句是否合法,或者是否满MySQL语法,如果语句不对,就会收到“You have an error in your SQL syntax”的错误提醒。
一般的语法错误会提示第一个出现错误的位置,所以要关注的是紧接“use near”的内容。
- 优化器:
经过了分析器,MySQL知道你要做什么了。再开始执行之前,还要先经过优化器的处理。
优化器是在表里面有多个索引的时候决定使用哪一个索引;或者在一个语句中有多个表关联的时候,决定各个表的连接顺序。
- 执行器:
MySQL通过优化器之后知道该怎么做,接下来就进入执行器阶段,开始执行语句。
开始执行的时候,要先判断一下对这个表有没有执行的权限,如果没有,就会返回没有权限的错误。如果有权限,就打开表继续执行。打开表的时候,执行器就会根据表的引擎去定义,去使用这个引擎提供的接口。