又是新的一周,各位周一好。缓存
因为换工做,找房子这一系列事情都推在了一块儿,因此最近停更了一个多月。如今全部的事情都已尘埃落定,我也能够安安静静的码字啦。安全
好了,也很少说,开始新的征程啦。最近一直在看《MySQL技术内幕——InnoDB存储引擎》这本书,也正好记录下吧。bash
咱们先看一下MySQL的架构图,对其先有一个总体的了解。MySQL主要分为四层架构,分别是网络链接层,服务层,存储引擎层,物理层。咱们日常写的SQL语句,以及对SQL语句的优化都在服务层,他其实就是遵循必定的原则使得SQL语句可以按咱们的预期效果执行。服务器
主要负责链接管理,受权认证,安全等。每一个客户端链接都对应着服务器上的一个线程。服务器上维护一个线程池,避免为每一个链接建立和销毁线程。当客户端链接到MySQL服务器时,服务器对其进行认证。能够经过用户名与密码认证,也能够经过SSL证书进行认证。登陆认证后,服务器还会验证客户端是否有执行某个查询的操做权限。这一层并非MySQL所特有的技术。网络
该层是MySQL的核心,包括查询缓存,解析器,解析树,预处理器,查询优化器。架构
而预处理器主要是进一步校验,好比表名,字段名是否正确等。优化
负责MySQL数据的存储和提取,是经过提供一系列的接口来屏蔽不一样引擎之间的差别。ui
注意:存储引擎是针对表的,而不是针对库。也就是说同一个库里面的不一样表能够拥有不一样的存储引擎。
spa
常见的存储引擎有两种,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;复制代码
咱们再去看一下他实际存储的内容,发现他对应这一个文件。
那么问题就来了,他的数据文件和索引文件存放在哪里啦。这边先留个问题,下下篇"文件"再说。
将数据存放在硬盘上。
咱们发送一条SQL语句,其在MySQL中的总体流程到底是什么样的?