百分百源码网-让建站变得如此简单! 登录 注册 签到领金币!

主页 | 如何升级VIP | TAG标签

当前位置: 主页>网站教程>数据库> 浅谈MySQL的整体架构
分享文章到:

浅谈MySQL的整体架构

发布时间:09/01 来源:未知 浏览: 关键词:
MySQL2.png

前言

又是新的一周,各位周一好。

由于换工作,寻房子这一系列事情都推在了一起,所以比来停更了一个多月。此刻所有的事情都已尘埃落定,我也可以安寂静静的码字啦。

好了,也不多说,开端新的征程啦。比来不断在看《MySQL技术黑幕——InnoDB储备引擎》这本书,也恰好记载下吧。

团体架构图

我们先看一下MySQL的架构图,对其先有一个团体的理解。MySQL主要分为四层架构,离别是网络连接层,效劳层,储备引擎层,物理层。我们平常写的SQL语句,乃至对SQL语句的优化都在效劳层,他其实就是遵照必然的原则使得SQL语句能够按我们的预测结果施行。

Snipaste_2019-06-18_14-21-37.png

各部分介绍

网络连接层

主要负责连接治理,授权认证,平安等。每个客户端连接都对应着效劳器上的一个线程。效劳器上保护一个线程池,幸免为每个连接创立和烧毁线程。当客户端连接到MySQL效劳器时,效劳器对其停止认证。可以通过会员名与密码认证,也可以通过SSL证书停止认证。登录认证后,效劳器还会验证客户端可否有施行某个查询的操纵权限。这一层并不是MySQL所特有的技术。

效劳层

该层是MySQL的中心,包罗查询缓存,解析器,解析树,预处置器,查询优化器。

Snipaste_2019-06-18_14-22-22.png

  • 查询缓存

在正式查询此前,效劳器会检查查询缓存,假如能寻到对应的查询,则不必停止查询解析,优化,施行等历程,直接返回缓存中的结果集。

  • 解析器和预处置器

MySQL的解析器会按照查询语句,结构出一个解析树,主要用于按照语律例则来验证语句可否准确,比方SQL的关键字可否准确,关键字的次序可否准确。

而预处置器主如果进一步校验,比方表名,字段名可否准确等。

  • 查询优化器

查询优化器将解析树转化为查询方案,一样状况下,一条查询可以有许多种施行方式,终究返回雷同的结果,优化器就是寻到这其中最优的施行方案

  • 施行方案

在完成解析和优化阶段后,MySQL按照响应的施行方案去调取储备引擎层供给的响应接口来猎取结果。

储备引擎层

负责MySQL数据的储备和提取,是通过供给一系列的接口来屏蔽不一样引擎之间的差别。

留意:储备引擎是针对表的,而不是针对库。也就是说统一个库里面的不一样表可以具有不一样的储备引擎。

常见的储备引擎有两种,MyISAM和InnoDB,下面我们来看下他们的不同。

第一,我们先创立一个储备引擎为MyISAM的test1表。

create table test1( a INTEGER, b varchar(10) )ENGINE=MyISAM;

我们可以去MySQL的相关名目看一下他实际储备的内容,发明他对应着三个文件。

Snipaste_2019-06-18_14-22-54.png

其次,我们再创立一个储备引擎为InnoDB的test2表。

create table test2( a INTEGER, b varchar(10) )ENGINE=INNODB;

我们再去看一下他实际储备的内容,发明他对应这一个文件。

Snipaste_2019-06-18_14-23-18.png

那么问题就来了,他的数据文件和索引文件存置在哪里啦。这边先留个问题,下下篇"文件"再说。

物理层

将数据存置在硬盘上。

团体流程

我们发送一条SQL语句,其在MySQL中的团体流程毕竟是啥样的?

  • 会员先通过Navicat等客户端与效劳端创立连接,这边需要会员名和密码停止认证,也可以用SSL证书停止认证。

  • 登录成功后,MySQL会按照响应权限来推断该角色可否具有一些表的权限等。

  • 假如具有相关权限,当会员发送一条查询select语句时,MySQL先查询缓存,假如已经有这条语句的缓存,则直接返回,假如没有则施行下面的流程。假如是更新update,新增insert,删除delete则不查询缓存,直接施行下面的流程。

  • MySQL会将SQL语句解析为树,然后对其停止校验,比方关键字可否准确,关键字次序可否准确,表名可否准确,字段可否准确等。假如认证没有成功,则直接返回错误。假如认证成功了,则直接下面流程。

  • MySQL对解析树停止查询优化,由于多个SQL大概表达的意思一样,但是耗损的时间大概差异很大。所以MySQL对针对表的储备引擎寻到最优的语句施行,也就是生成响应的施行方案。

  • 使用上面生成的施行方案,来调取储备引擎层的接口。也就是我们平常使用的explain,其可以用来查看可否走索引,耗损的时间等信息。

  • 不一样的储备引擎会到响应的物理储备位置,寻到响应的数据,封装并返回结果。

  • 假如拿到了结果集,并且为select语句,MySQL会将结果放入到缓存中,幸免下次再停止雷同的操纵而造成资源的耗损,同时返回给客户端结果,至此,一条SQL语句的施行历程完毕啦。

  • 更多MySQL相关技术文章,请拜访MySQL教程栏目停止学习!

以上就是浅谈MySQL的团体架构的具体内容,更多请关注百分百源码网其它相关文章!

打赏

打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,你说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

百分百源码网 建议打赏1~10元,土豪随意,感谢您的阅读!

共有156人阅读,期待你的评论!发表评论
昵称: 网址: 验证码: 点击我更换图片
最新评论

本文标签

广告赞助

能出一分力是一分吧!

订阅获得更多模板

本文标签

广告赞助

订阅获得更多模板