1、MySQL仍是个黑盒子
咱们都知道,只要咱们系统引入了 MySQL 驱动和链接池,就能从数据库链接池获取一个数据库链接,而后就能够执行增删改查的操做了。 但是咱们并不知道 MySQL 里面是怎么执行的,例如咱们执行了 insert 语句,只知道表里面多了一条数据,MySQL 是怎么插入的咱们就不知道了。数据库
2、解开 MySQL 这个黑盒子
一、一条工做线程:
举例: 咱们都知道,在 Socket 编程里,ServerSocket 会有一条线程负责监听 Socket 发送过来的网络请求,而且负责从网络请求里读取请求数据,而后再进行处理 。编程
原理: 那么在 MySQL 里也是同样的道理,会有一条工做线程
专门去监听 MySQL 数据库链接池里的网络请求,而且负责将请求中的 SQL 读取出来。网络
二、 SQL 接口:
上面说到 MySQL 的工做线程会从网络链接中读取 SQL。可是接下来是由谁继续执行呢? 举例: 咱们能够想象一下,在咱们的 Web 系统里头,Tomcat 这个进程会接收客户端的网络请求,而后通过转发交给咱们写的接口执行。优化
举例: 在 MySQL 里其实也同样,MySQL 就是一个数据库管理系统,上面说起到的工做线程会接收各个客户端的网络请求,而后通过转发交给内部的接口执行。 而这里的内部接口,叫 SQL 接口
,它是 MySQL 内部里的一个组件。它是一套执行 SQL 语句的接口,专门执行咱们的那些增删改查的 SQL 语句。spa
三、查询解析器:
举例: 咱们都知道,如今的计算机其实都不懂得咱们输入的命令,它只懂最后的 接收到的0/1信号。线程
举例: MySQL 也同样,虽然咱们按照必定的 SQL 语法写出了 SQL,可是 MySQL 却不能直接读懂这个 SQL 语句,而且由于 MySQL 的数据最后是存放在磁盘文件中的,因此须要先解析 SQL 语句,才知道怎么从磁盘文件中读取数据、修改数据、新增数据或者是删除数据。 这时候,查询解析器
就来了,它会专门对 SQL 语句按照必定的规则进行解析,而后让 MySQL 理解这个 SQL 语句是要干啥的。code
四、查询优化器:
举例: 相信你们都听过这么一句话:条条大道通罗马,可是确定有的路近,有的路远。接口
举例: 而 MySQL 执行 SQL 同样,也有不少种执行方法能够获得同样的结果,可是一定有的方法执行效率高,有的方法执行效率低。 这个时候,查询优化器
就来了,它会为 SQL 制定一套最优的执行计划。进程
五、执行器:
上面提到了最优的执行计划,那么计划必须有人的去执行,才能获得咱们写的 SQL 的结果。class
这时候,MySQL 里的执行器
会按照查询优化器生成的一套最优执行计划,一步一步的执行下去,知道完成这个计划为止。
六、存储引擎:
其实到了最后,真正操做数据库数据的是 MySQL 里的存储引擎
。上面的执行器会根据执行计划去不断调用存储引擎的接口来完成执行计划。