MySQL的基础架构

首先看一下MySQL的基础架构:
在这里插入图片描述
MySQL主要分为server层存储引擎层

  • server层 :包含连接器,查询缓存,分析器,优化器,执行器等,涵盖了mysql的大多数核心功能区以及所有的内置函数。
  • 存储引擎层:负责数据的存储和提取

接下来了解一下各个部分的功能:
1、连接器
负责跟客户端建立连接,获取权限,维持和管理连接。这个连接器位于server层,通过连接器可以让server层和客户端连接起来,从而登录到MySQL。连接语句一般是:

mysql -h$ip -P$port -u$user -p

连接时,在完成TCP握手之后,连接器就要开始认证你的身份,这个时候用的就是你输入的用户名和密码

  • 如果用户名或密码不对,你就会收到一个"Access denied for user"的错误,然后客户端程序结束执行
  • 如果用户名密码认证通过,连接器会到权限表里面查出你拥有的权限。之后,这个连接里面的权限判断逻辑,都将依赖于此时读到的权限

这就意味着一个用户成功连接之后,即使你用管理员账号对这个用户的权限做了修改,也不会影响已经存在的连接的权限。只有再新建的连接里才能使用修改之后的权限。

2、查询缓存
建立连接之后,就可以执行select语句了。
MySQL拿到查询请求后,会先查询缓存,看之前执行过的语句是否有key-value的形式被直接存放在内存中,key是查询语句,value是查询结果。如果能在缓存中 直接找到这个key,就可以直接返回value。如果缓存中没有,就继续后面的执行阶段。

但是大多数情况下,缓存的弊大于利。查询缓存的失效非常频繁,只要有对一个表的更新,跟这个表相关的缓存就会全部清除。对于更新比较频繁的数据库来说,查询缓存的命中率很低。

如果要关闭查询缓存,可以将参数query_cache_type设置成DEMAND,这样对于默认的SQL语句都不使用查询缓存。而对于你确定要使用查询缓存的语句,可以用SQL_CACHE显式指定,像下面这个语句一样:

select SQL_CACHE * from T where ID=10;

需要注意的是,MySQL 8.0版本直接将查询缓存的整块功能删掉了,也就是说8.0开始彻底没有这个功能了。

3、分析器
如果没有命中缓存,就要开始执行真正的sql语句了,因此要对sql语句进行解析。
以下面这个sql为例:

select * from T where ID=‘1’

词法分析:MySQL需要分析你这个sql语句中的字符分别是什么,分别代表什么。MySQL从你“select”识别出来这是一条查询语句,把“T”识别成“表T”,把“ID”识别成“字段ID”。

语法分析:语法分析器会根据语法规则,判断你输入的sql语句是否正确,不正确的话,会会收到“you have an error in your SQL syntax”的错误提醒。

4、优化器
分析完sql语句之后,MySQL就知道你具体要做什么了,在开始执行之前,还要进行优化器处理。

优化器是在表里有多个索引的时候,决定使用哪个索引。
或者在一个语句有多表关联(join)的时候,决定各个表的连接顺序。

不同的执行顺序不同,执行效率也会不同,而优化器的作用就是决定选择使用哪个方案。

5、执行器
MySQL通过分析器知道了你要做什么,通过优化器知道该怎么做,接下来就进入执行阶段。
开始执行的时候,要先判断你对这个表是否有执行的权限,如果没有,就返回没有权限的错误。
如果有权限就继续执行,比如:

select * from T where ID=‘1’

如果ID字段没有索引的话,执行器的流程是这样的:
1、调用InnoDB引擎接口取这个表的第一行,判断ID值是不是10,如果不是则跳过,如果是则将这行存在结果集中;
2、调用引擎接口取“下一行”,重复相同的判断逻辑,直到取到这个表的最后一行。
3、执行器将上述遍历过程中所有满足条件的行组成的记录集作为结果集返回给客户端。

如果ID有索引的话,那么第一次调用是“取满足条件的第一行”,之后循环取“满足条件的第二行”,直到渠道不满足条件的为止。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值