介绍
和其它数据库相比,MySQL 有点与众不同,它的架构可以在多种不同场景中应用并发挥良好作用。主要体现在存储引擎的架构上,插件式的存储引擎架构将查询处理和其它的系统任务以及数据的存储提取相分离,可以根据业务的需求和实际需要选择合适的存储引擎
图示分析
逻辑架构
组件分析
连接层
最上层是一些客户端和连接服务,包含本地 sock 通信和大多数基于客户端/服务端工具实现的类似于 tcp/ip 的通信,主要完成一些类似于连接处理、授权认证、及相关的安全方案
在该层上引入了线程池的概念,为通过认证安全接入的客户端提供线程,同样在该层上可以实现基于 SSL 的安全链接,服务器也会为安全接入的每个客户端验证它所具有的操作权限
服务层
Management Serveices & Utilities
系统管理和控制工具
SQL Interface
SQL 接口,接受用户的 SQL 命令,并且返回用户需要查询的结果,比如 select 语句就是调用的 SQL Interface
Parser
解析器,SQL 命令传递到解析器的时候会被解析器验证和解析
Optimizer
查询优化器,SQL 语句在查询之前会使用查询优化器对查询进行优化,例如查询
select uid, name from user where gender=1;
此时,优化器会决定先投影还是先过滤
Caches & Buffers
查询缓存,如果查询缓存有命中的查询结果,查询语句就可以直接去查询缓存中取数据,该缓存机制由一系列小缓存组成,比如表缓存,记录缓存,key 缓存,权限缓存等
缓存负责读,缓冲负责写
引擎层
存储引擎层,存储引擎真正的负责了 MySQL 中数据的存储和提取,服务器通过 API 与存储引擎进行通信
不同的存储引擎具有的功能不同,可以根据实际的需要进行选取
存储层
数据存储层,主要是将数据存储在运行于裸设备的文件系统之上,并完成与存储引擎的交互
查询流程分析
图示分析
查询流程分析
流程分析
查询
MySQL 客户端通过协议与 MySQL 服务器建立连接,发送查询语句
缓存匹配
先检查查询缓存,如果 SQL 命中,则直接返回结果,否则进行语句解析,也就是说,在解析查询之前服务器会先访问查询缓存 (Query Cache),它存储了 SELECT 语句以及相应的查询结果集
如果某个查询结果已经位于缓存中,服务器就不会再对查询进行解析、优化、以及执行,它仅仅将缓存中的结果返回,提高了系统的性能
解析
经过语法解析器和预处理,首先 MySQL 通过关键字将 SQL 语句进行解析,并生成一颗对应的解析树
MySQL 解析器将使用 MySQL 语法规则验证和解析查询,预处理器则根据一些 MySQL 规则进一步检查解析树是否合法
优化
当查询优化器认为解析树是合法的时候,由优化器将其转化成执行计划,一条查询可以有很多种执行方式,最后都返回相同的结果,优化器的作用就是找到这其中最好的执行计划