MySQL学习(1):不是吧?用了这么久SQL。底层怎么执行不知道?

MySQL学习:基础架构

行者常成。
在这里插入图片描述

MySQL的逻辑图:
在这里插入图片描述

整体分为:

  1. Server层:主要是执行我们服务端的连接
    1. 连接器:负责有客户端(我们账户)的权限检查和对接
      1. 尽量去是用 长连接来减少 连接的消耗
    2. 查询缓存: 就是 缓存的概念;内容是 Key-Value的键值对:对应我们曾经操作过的数据: 再次使用,优化查询效率:**但是MySQL8.0以后就去除了这个缓存 ** 缺点:本身对于数据库的操作实时性操作比较多,导致缓存的是过期严重
    3. 分析器: 根据词义分析SQL语句
    4. 优化器:优化SQL语句 便于执行器的执行
    5. 执行器: 执行语句 连接存储引擎:返回SQLJ结果

MySQL的增删改查操作的原理:

查操作 : select : 走的就是上面的一个流程

改(增删改)操作:也是上面的流程: 但是会有一个MySQL里经常说到的WAL技术,WAL的全称是Write_Ahead _Logging,它的关键点就是先写日志,再写磁盘,也就是 先满足内存使用,在进行物理磁盘的存储

但是有两个 重要的概念的 日志模块

:解释 日志: 就是对于我们一些的操作的状态的记录:便于我们处理数据: 在MySQL的作用就是:在于我们存储 数据的时候 起到 中间件的作用:

举个例子:当有一条记录需要更新的时候,InnoDB引擎就会先把记录写到redo log里面,并更新内存来使用,这个时候更新就算完成了。同时,InnoDB引擎会在适当的时候,将这个操作 在记录更新到物理磁盘里面永久保存。

  • Redo Log(物理日志) :InnoDB引擎特有的一个日志模块:
    • Redo Log 底层会维持一个连续的内存空间:两个类似于指针 一个负责写 另一个负责擦 旧的: 这个操作 叫: crash-safe。

  • Bin Log (逻辑日志) :MySQL的Server层日志:

两种日志的不同:

  1. redo log是InnoDB引擎特有的;binlog是MySQL的Server层实现的,所有引擎都可以使用。
  2. redo log是物理日志,记录的是“在某个数据页上做了什么修改”;binlog是逻辑日志,记录的 是这个语句的原始逻辑,比如“给ID=2这一行的c字段加1 ”。
  3. redo log是循环写的,空间固定会用完;binlog是可以追加写入的。“追加写”是指binlog文件 写到一定大小后会切换到下一个,并不会覆盖以前的日志。

下面那一条SQL语句走一遍执行流程:

mysql> update T set c=c+1 where ID=2;

在这里插入图片描述

黑色箭头标注的 是 必须保证 写入两个日志模块!! 不然数据不平衡: 保持数据的逻辑一致性:比如主从复制的应用

今天的SQL先分享到这里了。。。。。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值