浅谈MySQL的整体架构
![1560838437238309.png MySQL2.png](/uploads/allimg/200930/156083843723830912770.png)
前言
又是新的一周,各位周一好。
由于换工作,寻房子这一系列事情都推在了一起,所以比来停更了一个多月。此刻所有的事情都已尘埃落定,我也可以安寂静静的码字啦。
好了,也不多说,开端新的征程啦。比来不断在看《MySQL技术黑幕——InnoDB储备引擎》这本书,也恰好记载下吧。
团体架构图
我们先看一下MySQL的架构图,对其先有一个团体的理解。MySQL主要分为四层架构,离别是网络连接层,效劳层,储备引擎层,物理层。我们平常写的SQL语句,乃至对SQL语句的优化都在效劳层,他其实就是遵照必然的原则使得SQL语句能够按我们的预测结果施行。
各部分介绍
网络连接层
主要负责连接治理,授权认证,平安等。每个客户端连接都对应着效劳器上的一个线程。效劳器上保护一个线程池,幸免为每个连接创立和烧毁线程。当客户端连接到MySQL效劳器时,效劳器对其停止认证。可以通过会员名与密码认证,也可以通过SSL证书停止认证。登录认证后,效劳器还会验证客户端可否有施行某个查询的操纵权限。这一层并不是MySQL所特有的技术。
效劳层
该层是MySQL的中心,包罗查询缓存,解析器,解析树,预处置器,查询优化器。
查询缓存
在正式查询此前,效劳器会检查查询缓存,假如能寻到对应的查询,则不必停止查询解析,优化,施行等历程,直接返回缓存中的结果集。
解析器和预处置器
MySQL的解析器会按照查询语句,结构出一个解析树,主要用于按照语律例则来验证语句可否准确,比方SQL的关键字可否准确,关键字的次序可否准确。
而预处置器主如果进一步校验,比方表名,字段名可否准确等。
查询优化器
查询优化器将解析树转化为查询方案,一样状况下,一条查询可以有许多种施行方式,终究返回雷同的结果,优化器就是寻到这其中最优的施行方案
施行方案
在完成解析和优化阶段后,MySQL按照响应的施行方案去调取储备引擎层供给的响应接口来猎取结果。
储备引擎层
负责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;
我们再去看一下他实际储备的内容,发明他对应这一个文件。
那么问题就来了,他的数据文件和索引文件存置在哪里啦。这边先留个问题,下下篇"文件"再说。
物理层
将数据存置在硬盘上。
团体流程
我们发送一条SQL语句,其在MySQL中的团体流程毕竟是啥样的?
会员先通过Navicat等客户端与效劳端创立连接,这边需要会员名和密码停止认证,也可以用SSL证书停止认证。
登录成功后,MySQL会按照响应权限来推断该角色可否具有一些表的权限等。
假如具有相关权限,当会员发送一条查询select语句时,MySQL先查询缓存,假如已经有这条语句的缓存,则直接返回,假如没有则施行下面的流程。假如是更新update,新增insert,删除delete则不查询缓存,直接施行下面的流程。
MySQL会将SQL语句解析为树,然后对其停止校验,比方关键字可否准确,关键字次序可否准确,表名可否准确,字段可否准确等。假如认证没有成功,则直接返回错误。假如认证成功了,则直接下面流程。
MySQL对解析树停止查询优化,由于多个SQL大概表达的意思一样,但是耗损的时间大概差异很大。所以MySQL对针对表的储备引擎寻到最优的语句施行,也就是生成响应的施行方案。
使用上面生成的施行方案,来调取储备引擎层的接口。也就是我们平常使用的explain,其可以用来查看可否走索引,耗损的时间等信息。
不一样的储备引擎会到响应的物理储备位置,寻到响应的数据,封装并返回结果。
假如拿到了结果集,并且为select语句,MySQL会将结果放入到缓存中,幸免下次再停止雷同的操纵而造成资源的耗损,同时返回给客户端结果,至此,一条SQL语句的施行历程完毕啦。
更多MySQL相关技术文章,请拜访MySQL教程栏目停止学习!
以上就是浅谈MySQL的团体架构的具体内容,更多请关注百分百源码网其它相关文章!