MySQL逻辑架构

MySQL逻辑架构

本专栏学习内容来自尚硅谷宋红康老师的视频

有兴趣的小伙伴可以点击视频地址观看

1. 逻辑架构解析

1.1 服务器处理客户端请求

MySQL是经典的C/S架构,不论客户端进程和服务器进程采用哪种方式进行通信,最后实现的效果都是:客户端进程向服务器进程发送一段sql语句,服务器进程处理后再向客户端进程发送处理结果

如下图所示,服务器进程对客户端进程做了以下处理,才会返回最后处理结果

请添加图片描述

1.2 Connectors

Connectors被称为连接器,其中包括Java、C、Python的客户端都可以是连接器,向MySQL服务器发送请求

1.3 连接层

客户端访问MySQL服务器前,第一件事就是要建立TCP连接

经过三次握手建立连接成功后,MySQL服务器对TCP传输过来的账号密码做身份认证、权限获取

  • 用户名或密码不对,会收到一个Access denied for user错误,客户端程序结束执行
  • 用户名密码认证通过,会从权限表查出账号所拥有的权限与连接关联,之后的权限判断逻辑,都将依赖此时读到的权限

1.4 服务层

服务层完成大多数核心服务功能,包括查询解析、分析、优化、以及所有的内置函数,所有跨存储引擎的功能也都在这一层实现:存储过程、触发器、视图等

1.5 引擎层

存储引擎负责MySQL中数据的存储和提取,每个存储引擎都有优势和劣势,服务器通过存储引擎API进行通行。

1.6 存储层

所有的数据,数据库、表的定义,表的每一行的内容、索引,都是存储在文件系统上,以文件的方式存在的,并完成与存储引擎的交互。

2. SQL执行流程

2.1 MySQL重的SQL执行流程

在这里插入图片描述

MySQL的查询流程

  1. 查询缓存:Server如果在查询缓存中发现了这条SQL语句,就会直接将结果返回给客户端;如果没有,就进入到解析器阶段。

    MySQL的缓存是以Key-Value格式保存的,其中Key为查询的SQL语句,那么就会出现以下几种问题

    1. 必须要求SQL语句完全相同,假设多一个空格或者大小写不一样,就不能命中缓存
    2. 如果SQL语句中有调用now()函数,那么缓存的查询结果是无效的
    3. 对缓存的数据执行了update或delete方法,但缓存没有删除
  2. 解析器:分析器会先做词法分析,MySQL需要识别出字符串中分别是什么,代表什么;接着会做语法分析,会根据语法规则,判断SQL语句是否满足MySQL语法。如果SQL语句正确,则会生成语法树

  3. 优化器:会确定SQL语句的执行路径,比如是根据全表检索还是根据索引检索等,

    经过了解析器,在开始执行之前,还是要先经过优化器的处理。一条查询可以有很多种执行方式,最后都会返回相同的结果。优化器的作用就是找到其中最好的执行计划

  4. 执行器:调用存储引擎API对表进行读写

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值