如何解析MySQL的整体架构
本篇文章给大家分享的是有关如何解析MySQL的整体架构,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。
成都创新互联是一家专注网站建设、网络营销策划、微信小程序开发、电子商务建设、网络推广、移动互联开发、研究、服务为一体的技术型公司。公司成立十载以来,已经为数千家成都混凝土搅拌站各业的企业公司提供互联网服务。现在,服务的数千家客户与我们一路同行,见证我们的成长;未来,我们一起分享成功的喜悦。
整体架构图
我们先看一下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的整体架构
网站路径:http://pwwzsj.com/article/ipgsgs.html