送你小心心记得关注我哦!!
目录
① 前言
② 整体架构图
②①网络连接层
②②服务层
②③存储引擎层
②④物理层
③ 整体流程
前言
又是新的一周,各位周一好。
由于换工作,找房子这一系列事情都推在了一起,所以最近停更了一个多月。现在所有的事情都已尘埃落定,我也可以安安静静的码字啦。
好了,也不多说,开始新的征程啦。最近一直在看《MySQL技术内幕——InnoDB存储引擎》这本书,也正好记录下吧。
整体架构图
我们先看一下MySQL的架构图,对其先有一个整体的了解。MySQL主要分为四层架构,分别是网络连接层,服务层,存储引擎层,物理层。我们平常写的SQL语句,以及对SQL语句的优化都在服务层,他其实就是遵循一定的原则使得SQL语句能够按我们的预期效果执行。
网络连接层
主要负责连接管理,授权认证,安全等。每个客户端连接都对应着服务器上的一个线程。服务器上维护一个线程池,避免为每个连接创建和销毁线程。当客户端连接到MySQL服务器时,服务器对其进行认证。可以通过用户名与密码认证,也可以通过SSL证书进行认证。登录认证后,服务器还会验证客户端是否有执行某个查询的操作权限。这一层并不是MySQL所特有的技术。
服务层
在正式查询之前,服务器会检查查询缓存,如果能找到对应的查询,则不必进行查询解析,优化,执行等过程,直接返回缓存中的结果集。
MySQL的解析器会根据查询语句,构造出一个解析树,主要用于根据语法规则来验证语句是否正确,比如SQL的关键字是否正确,关键字的顺序是否正确。
而预处理器主要是进一步校验,比如表名,字段名是否正确等。
查询优化器将解析树转化为查询计划,一般情况下,一条查询可以有很多种执行方式,最终返回相同的结果,优化器就是找到这其中最优的执行计划
在完成解析和优化阶段后,MySQL根据相应的执行计划去调用存储引擎层提供的相应接口来获取结果。
存储引擎层
注意:存储引擎是针对表的,而不是针对库。也就是说同一个库里面的不同表可以拥有不同的存储引擎。
常见的存储引擎有两种,MyISAM和InnoDB,下面我们来看下他们的区别。
首先,我们先创建一个存储引擎为MyISAM的test1表。
create table test1(
a INTEGER,
b varchar(10)
)ENGINE=MyISAM;
我们可以去MySQL的相关目录看一下他实际存储的内容,发现他对应着三个文件。
其次,我们再创建一个存储引擎为InnoDB的test2表。
create table test2(
a INTEGER,
b varchar(10)
)ENGINE=INNODB;
我们再去看一下他实际存储的内容,发现他对应这一个文件。
那么问题就来了,他的数据文件和索引文件存放在哪里啦。这边先留个问题,下下篇"文件"再说。
物理
整体流程