剖析 MySQL 黑盒——MySQL 架构设计
为何称 MySQL 为黑盒?
对于大部分的开发人员而言,编写增删查改的 sql 语句通过数据库连接去操作数据库,但并不关心数据库是如何监听请求和从连接中把请求数据中提取出来,往往在意表结构,sql 执行效率慢就给他们建立索引,完全把 MySQL 当作黑盒子去使用。
1. 网络连接必须使用线程来处理
MySQL 使用内部线程来实现监听和读取请求。
2. SQL 接口:负责处理接收到的 sql 语句
MySQL 通过 sql 接口把我们平时编写的 sql 语句简单化,让我们轻松地学会和编写 sql 语句,但其底层实现其实是非常复杂。当工作线程接收到 sql 语句之后,会交给 sql 接口去执行。
3. 查询解释器:让 MySQL 看懂 sql 语句
MySQL 是一个数据管理系统,并不能像我们一样直接读懂 sql 语句,例如:
需要借助组件 查询解析器 对 sql 语句进行解析和拆解,拆解成以下几部分:
from users: 我们需要从 users 表里面查询数据
where id = 1 :查询 id 字段值为 1 的那行数据
select id, name, age : 从查出来的那行数据中提取出 "id,name,age"三个字段
4. 查询优化器:选择最优的查询路径
查询优化器会根据 sql 生成查询路径树,然后从里面选择一条最优的查询路径出来。
5. 调用存储引擎接口,真正执行 sql 语句
数据库存储的数据,有可能存储在磁盘上,有可能存储在内存中。那怎么判别查询的数据存放在哪一个地方?存储引擎根据执行器的调度执行 sql 逻辑,无论是从内存缓存中查询数据,从磁盘中更新数据,一系列操作全都由存储引擎执行。
6. 执行器:根据执行计划调度存储引擎
执行器根据优化器的执行计划去调用存储引擎的各种接口来完成 sql 语句的执行。
总结:
在 MySQL 架构设计中,SQL 接口、SQL 解析器、查询优化器、执行器都是一套通用的组件,但是存储引擎却有不同的选择,例如:InnoDB、MyISAM、Memory 等,对应不同的应用场景,MySQL 的默认是 InnoDB,在后续会一步一步分析。 所以综上所述,MySQL 的执行 sql 语句的顺序为: sql 接口->解析器:解释 sql->优化器:生成执行计划->执行器:执行计划去调用 InnoDB 存储引擎接口执行 sql
最后小编还整理了一份面试宝典 有需要的添加小助理 vx:mxzFAFAFA 来领取
版权声明: 本文为 InfoQ 作者【学Java关注我】的原创文章。
原文链接:【http://xie.infoq.cn/article/0d24089c64253295c60f03ee8】。文章转载请联系作者。
评论