MySQL实战45讲

前言

提炼自极客时间林晓斌MySQL实战45讲

大体来说,MySQL可以分为Server层和存储引擎层两部分。

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

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

也就是说,你执行create table建表的时候,如果不指定引擎类型,默认使用的就是InnoDB。可以在create table语句中使用 engine=memory, 来指定使用内存引擎创建表

从图中不难看出,不同的存储引擎共用一个Server层 ,也就是从连接器到执行器的部分。
在这里插入图片描述

连接器

数据库里面,长连接是指连接成功后,如果客户端持续有请求,则一直使用同一个连接。

短连接则是指每次执行完很少的几次查询就断开连接,下次查询再重新建立一个。

查询缓存

之前执行过的语句及其结果可能会以key-value对的形式,被直接缓存在内存中。

key是查询的语句,value是查询的结果。如果你的查询能够直接在这个缓存中找到key,那么这个value就会被直接返回给客户端。

但是大多数情况下我会建议你不要使用查询缓存,为什么呢?因为查询缓存往往弊大于利。

查询缓存的失效非常频繁,只要有对一个表的更新,这个表上所有的查询缓存都会被清空。

因此 很可能你费劲地把结果存起来,还没使用呢,就被一个更新全清空了。对于更新压力大的数据库 来说,查询缓存的命中率会非常低。

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

分析器

词法分析

你输入的是由多个字符串和空格组成的一条SQL语句,MySQL需要识 别出里面的字符串分别是什么,代表什么。

语法分析

根据词法分析的结果,语法分析器会根据语法规则, 判断你输入的这个SQL语句是否满足MySQL语法。

优化器

优化器是在表里面有多个索引的时候,决定使用哪个索引

或者在一个语句有多表关联(join)的时候,决定各个表的连接顺序。

执行器

开始执行的时候,要先判断一下你对这个表T有没有执行查询的权限,如果没有,就会返回没有权限的错误。

如果有权限,就打开表继续执行。打开表的时候,执行器就会根据表的引擎定义,去使用这个引擎提供的接口。

与查询流程不一样的是,更新流程还涉及两个重要的日志模块,它们正是我们今天要讨论的主 角:redo log(重做日志)和 binlog(归档日志)。

WAL的全称是Write- Ahead Logging,它的关键点就是先写日志,再写磁盘

redo log

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值