每一个虚线框为一层,总共三层。mysql
第一层:链接层,所包含的服务并非MySQL所独有的技术。它们都是服务于C/S程序或者是这些程序所须要的 :链接处理,身份验证,安全性等等。算法
第二层值得关注:服务层。这是MySQL的核心部分。一般叫作 SQL Layer。在 MySQL数据库系统处理底层数据以前的全部工做都是在这一层完成的,包括权限判断, sql解析,行计划优化, query cache 的处理以及全部内置的函数(如日期,时间,数学运算,加密)等等。各个存储引擎提供的功能都集中在这一层,如存储过程,触发器,视 图等。sql
第三层:引擎层。一般叫作StorageEngine Layer ,也就是底层数据存取操做实现部分,由多种存储引擎共同组成。它们负责存储和获取全部存储在MySQL中的数据。就像Linux众多的文件系统 同样。每一个存储引擎都有本身的优势和缺陷。服务器是经过存储引擎API来与它们交互的。这个接口隐藏 了各个存储引擎不一样的地方。对于查询层尽量的透明。这个API包含了不少底层的操做。如开始一个事物,或者取出有特定主键的行。存储引擎不能解析SQL,互相之间也不能通讯。仅仅是简单的响应服务器 的请求。数据库
第四层:存储层。将数据存储在文件系统上,并完成与存储引擎的交户。缓存
相关概念介绍Connectors:指的是不一样语言中与SQL的交互安全
Management Serveices & Utilities: 系统管理和控制工具服务器
Connection Pool: 链接池
管理缓冲用户链接,线程处理等须要缓存的需求。
负责监听对 MySQL Server 的各类请求,接收链接请求,转发全部链接请求到线程管理模块。每个链接上 MySQL Server 的客户端请求都会被分配(或建立)一个链接线程为其单独服务。而链接线程的主要工做就是负责 MySQL Server 与客户端的通讯,接受客户端的命令请求,传递 Server 端的结果信息等。线程管理模块则负责管理维护这些链接线程。包括线程的建立,线程的 cache 等。数据结构
SQL Interface: SQL接口。
接受用户的SQL命令,而且返回用户须要查询的结果。好比select from就是调用SQL Interface架构
Parser: 解析器。
SQL命令传递到解析器的时候会被解析器验证和解析。解析器是由Lex和YACC实现的,是一个很长的脚本。在 MySQL中咱们习惯将全部 Client 端发送给 Server 端的命令都称为 query ,在 MySQL Server 里面,链接线程接收到客户端的一个 Query 后,会直接将该 query 传递给专门负责将各类 Query 进行分类而后转发给各个对应的处理模块。
主要功能:ide
Optimizer: 查询优化器。
SQL语句在查询以前会使用查询优化器对查询进行优化。就是优化客户端请求的 query(sql语句),根据客户端请求的 query 语句,和数据库中的一些统计信息,在一系列算法的基础上进行分析,得出一个最优的策略,告诉后面的程序如何取得这个 query 语句的结果。他使用的是选取-投影-联接策略进行查询。
用一个例子就能够理解: select uid,name from user where gender = 1;
这个select 查询先根据where 语句进行选取,而不是先将表所有查询出来之后再进行gender过滤
这个select查询先根据uid和name进行属性投影,而不是将属性所有取出之后再进行过滤
将这两个查询条件联接起来生成最终查询结果
Cache和Buffer: 查询缓存。
主要功能是将客户端提交 给MySQL 的 Select 类 query 请求的返回结果集 cache 到内存中,与该 query 的一个 hash 值作一个对应。该 Query 所取数据的基表发生任何数据的变化以后, MySQL 会自动使该 query 的Cache 失效。在读写比例很是高的应用系统中, Query Cache 对性能的提升是很是显著的。固然它对内存的消耗也是很是大的。
若是查询缓存有命中的查询结果,查询语句就能够直接去查询缓存中取数据。这个缓存机制是由一系列小缓存组成的。好比表缓存,记录缓存,key缓存,权限缓存等
可插拔存储引擎
存储引擎接口模块能够说是 MySQL 数据库中最有特点的一点了。目前各类数据库产品中,基本上只有 MySQL 能够实现其底层数据存储引擎的插件式管理。这个模块实际上只是 一个抽象类,但正是由于它成功地将各类数据处理高度抽象化,才成就了今天 MySQL 可插拔存储引擎的特点。
MySQL区别于其余数据库的最重要的特色就是其插件式的表存储引擎。MySQL插件式的存储引擎架构提供了一系列标准的管理和服务支持,这些标准与存储引擎自己无关,多是每一个数据库系统自己都必需的,如SQL分析器和优化器等,而存储引擎是底层物理结构的实现,每一个存储引擎开发者均可以按照本身的意愿来进行开发。
注意:存储引擎是基于表的,而不是数据库。
查看命令
#查看mysql现已提供什么存储引擎 show engines; #查看当前默认的存储引擎 show variables like ‘%storage_engine%’;MyISAM和InnoDB