【1】一个不变的原则:网络连接必须让线程来处理。网络连接必须得分配一个线程去进行处理,由一个线程来监听请求以及读取请求数据,比如从网络连接中读取和解析出来一条我们系统发送过去的SQL语句。
【2】当MySQL内部的工作线程从一个网络连接中读取出来一个SQL语句之后,如何来执行SQL语句呢?MySQL内部提供了一个组件,就是SQL接口,他是一套执行SQL语句的接口,专门用于执行我们发送给MySQL的那些增删改查的SQL语句。因此MySQL的工作线程接收到SQL语句之后,就会 转交给SQL接口去执行。
【3】查询解析器,让MySQL能看懂SQL语句。所谓的SQL解析,就是按照既定的SQL语法,按照SQL语法规则编写的SQL语句进行解析,然后理解这个SQL语句要干什么事情。
【4】查询优化器:选择最优的查询路径。当我们通过解析器理解了SQL语句要干什么之后,就会找查询优化器来选择一个最优的查询路径。查询优化器他会针对你编写的几十行、甚至上百行的复杂语句生成查询路径树,然后从里面选择一条最优的查询路径出来。
【5】调用存储引擎接口,真正执行SQL语句。将查询优化器选择的最优查询路径,交给底层的存储引擎去真正的执行。真正执行SQL语句的时候,要不然是更新数据,要不然是查询数据,MySQL中的数据有的存放在内存里,有的存放在磁盘文件里。存储引擎其实就是执行SQL语句的,他会按照一定的步骤去查询内存缓存数据,更新磁盘数据,查询磁盘数据,等等,执行诸如此类的一系列的操作。存储引擎有常见的InnoDB、MyISAM、Memory等等。现在MySQL一般都是使用InnoDB存储引擎的。
为什么需要存储引擎?
我们已经知道一个SQL语句要如何执行了,但是我们现在怎么知道哪些数据在内存里?哪些数据在磁盘里?我们执行的时候是更新内存的数据?还是更新磁盘的数据?我们如果更新磁盘的数据,是先查询哪个磁盘文件,再更新哪个磁盘文件?
这个时候就需要存储引擎了,存储引擎其实就是执行sql语句的
【6】执行器:存储引擎可以帮助我们去访问内存以及磁盘上的数据,那么是谁来调用存储引擎的接口呢? 执行器会根据优化器选择的执行方案,去调用存储引擎的接口按照一定的顺序和步骤,就把SQL语句的逻辑给执行了。
根据执行计划调用存储引擎接口。执行器会根据我们的优化器生成的一套执行计划,然后不停的调用存储引擎的各种接口去完成SQL语句的执行计划。
![](https://img.haomeiwen.com/i7689346/28e9e0df3b9bede2.png)
网友评论