MySQL架构与执行流程

1、MySQL体系结构mysql

一、Connector:用来支持各类语言和 SQL 的交互,好比 PHP,Python,Java 的 JDBC; 
二、Management Serveices & Utilities:系统管理和控制工具,包括备份恢复、MySQL 复制、集群等等; 
三、Connection Pool:链接池,管理须要缓冲的资源,包括用户密码权限线程等 等; 
四、SQL Interface:用来接收用户的 SQL 命令,返回用户须要的查询结果 
五、Parser:用来解析 SQL 语句; 六、 Optimizer:查询优化器; 
七、Cache and Buffer:查询缓存,除了行记录的缓存以外,还有表缓存,Key 缓 存,权限缓存等等; 
八、Pluggable Storage Engines:插件式存储引擎,它提供 API 给服务层使用, 跟具体的文件打交道。sql

2、架构分层缓存

一、链接层:管理全部的链接,验证客户端的身份和权限
二、链接层会把 SQL 语句交给服务层,这里面又包含一系列的流程:好比查询缓存的判断、根据 SQL 调用相应的接口,对咱们的SQL语句进行词法和语法的解析(好比关键字怎么识别,别名怎么识别,语法有没有错误等等)。 而后就是优化器,MySQL 底层会根据必定的规则对咱们的 SQL 语句进行优化,最后再交给执行器去执行。
三、存储引擎就是咱们的数据真正存放的地方,在 MySQL 里面支持不一样的存储引擎。再往下就是内存或者磁盘。数据结构

3、查询语句执行流程架构

一、创建链接
    MySQL是支持多种通讯协议(Unix Socket、TCP/IP)的,可使用同步/异步的方式,支持长链接/短链接,采用半双工的通信方式。
二、查询缓存
    mysql内部自带缓存模块,但默认关闭(缘由是它要求查询缓存的SQL语句必须彻底一致,大小写都不能不同,另外表里任何一条数据发生变化,整张表的缓存都会失效)
三、语法解析和预处理(Parser & Preprocessor)
    语法解析:对语句基于 SQL 语法进行词法和语法分析和语义的解析。
    词法分析就是把一个完整的 SQL 语句打碎成一个个的单词
    语法分析会对 SQL 作一些语法检查,好比单引号有没有闭合,而后根据 MySQL 定义的语法规则,根据 SQL 语句生成一个数据结构。这个数据结构我 们把它叫作解析树(select_lex)。
    预处理器会检查生成的解析树,解决解析器没法解析的语义。好比,它会检查表和列名是 否存在,检查名字和别名,保证没有歧义。 预处理以后获得一个新的解析树。
四、查询优化器与执行计划
    优化器会根据解析树生成不一样的执行计划,而后选择一种最优的执行计划,MySQL 里面使用的是基于开销(cost)的优化器,那种执行计 划开销最小,就用哪一种
    在 SQL 语句前面加上 EXPLAIN,就能够 看到执行计划的信息。 Explain 的结果也不必定最终执行的方式
五、存储引擎
    执行引擎调用存储引擎执行执行计划
    在MySQL里面,支持多种存储引擎,他们是能够替换的,因此叫作插件式的存储引擎异步

MySQL存储引擎汇总(来自官网)工具

4、更新语句的执行流程优化

一、事务开始,从内存或磁盘取到这条数据,返回给 Server 的执行器;
二、执行器修改这一行数据的值;
三、记录 原值到 undo log;
四、记录 修改值 到 redo log;
五、调用存储引擎接口,在内存(Buffer Pool)中修改这一行数据;
六、事务提交。
内存和磁盘之间,工做着不少后台线程

基本流程与查询一致的,也就是说,它也要通过解析器、优化器的处理,最后交给执行器。
区别就在于拿到符合条件的数据以后的操做