Mysql——内部结构了解

一、结构概况

MySQL大概来讲分为两大层:
service层 和 引擎层

service层:主要包括连接器、查询缓存、分析器、优化器、执行器等,涵盖 MySQL 的大多数核心服务功能,以及所有的内置函数 (如日期、时间、数学和加密函数等),所有跨存储引擎的功能都在这一层实现,比如存储过程、触发器、视图等。

引擎层: 存储引擎层负责数据的存储和提取。其架构模式是插件式的,支持 InnoDB、MyISAM、Memory 等多个存储引擎。现在 最常用的存储引擎是 InnoDB,它从 MySQL 5.5.5 版本开始成为了默认存储引擎

在这里插入图片描述

二、连接器

市面上有很多链接数据库的客户端:navicat,mysql front,jdbc,SQLyog等。这些 客户端要向mysql发起通信都必须先跟Server端建立通信连接,而建立连接的工作就是有连接器完成的。

三、查询缓存

MySQL 拿到一个查询请求后,会先到查询缓存看看,之前是不是执行过这条语句。之前执行过的语句及其结果可能会以 key-value 对的形式,被直接缓存在内存中。key 是查询的语句,value 是查询的结果。

但是在大多数情况下,我们都用不到缓存,因为只要有对一个表的更新,这个表上所有的查询缓存都会被清空。因此很可能你费劲地把结果存起来,还没使用呢,就被一个更新全清空了。对于更新压力大的数据库来说,查询缓存的命中率 会非常低。

mysql8.0已经移除了查询缓存功能

四、分析器

一条sql语句执行后,如果没有被缓存命中,那就会被分析器来对它做解析。
经过6个主要分析:

  1. 词法分析 :
    分析是否是合法的词,如果不是直接返回错误信息

  2. 语法分析 :
    分析语法是否合法;
    Java当中也有开源的词法结构分析工具例如Antlr4,ANTLR从语法生成一个解析器,可以构建和遍历解析树,可以在IDEA 工具当中安装插件:antlr v4 grammar plugin.
    经过bison语法分析之后,会生成一个这样的语法树:
    在这里插入图片描述

  3. 语义分析 :

  4. 构造执行树

  5. 生成执行计划

  6. 计划的执行

五、优化器

经过了分析器,MySQL 就知道你要做什么了。在开始执行之前,还要先经过优化器的处理。
如果有多个索引,优化器会帮你选择用哪个索引; 多个表join的时候,会优化join的顺序;等等。
优化器的作用就是决定选择使用哪一个方案。

六、执行器

开始执行的时候,要先判断一下你对这个表 T 有没有执行查询的权限,如果没有,就会返回没有权限的错误。
如果有权限,就打开表继续执行。打开表的时候,执行器就会根据表的引擎定义,去使用这个引擎提供的接口。 通过调用引擎接口去执行具体的操作。

七、bin-log文件

数据库的数据恢复,可以用bin-log文件。
因为我们的SQL执行时,会将sql语句的执行逻辑记录在我们的bin-log文件当中。
binlog是Server层实现的二进制日志,他会记录我们的创建、修改、删除的操作,也就是不管什么引擎,都会有binlog文件的。
如果,我们误删了数据库,可以使用binlog进行归档!要使用binlog归档,首先我们得记录binlog,因此需要先开启MySQL的 binlog功能。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值