解析一条SQL语句在MySQL中会经历的过程

SQL语句是如何被执行的?让我们来从头说起

写了那么多的CURD,你对SQL的执行流程真的了解吗?

如果你对MySQL的认识还是一个黑盒子,那么赶紧和我一起看看在它的里面是如何的

为了能够让大部分读者能够理解,我将尽量用大白话来进行解释

话不多说,进入正题吧~

1、MySQL与客户端进行连接的连接池

对于客户端,我们都知道,Java系统与数据库进行连接是借助MySQL驱动来实现的,就像下面这样

在这里插入图片描述

我们都知道,频繁地建立连接和销毁连接是一件非常消耗系统资源的事,因此,连接池便应运而生了,就像下面这样

在这里插入图片描述

同样的道理,我们站在数据库的角度来思考,同样也需要维护一个连接池来与Java系统建立连接,如下图所示

在这里插入图片描述

从上面不难看出,MySQL执行SQL语句的第一步,便是连接池

2、解析优化SQL语句

MySQL中的连接池中的某个连接收到了某个请求的时候,会交由一个监听请求的线程,并将SQL语句交给他来处理,就像下面这样

在这里插入图片描述

3、SQL接口

线程它是没办法对SQL直接进行处理的,它会把SQL交由SQL接口执行

在这里插入图片描述

4、SQL解析器

众所周知,即便不是程序猿,只要认识SQL语句中的单词的,基本上都能理解SQL语句的意思,就是SQL语句这么好理解,所以MySQL花费了很大功夫的,去将其变成计算机能理解的,要完成这一功能,首先就需要SQL解析器,来对SQL语句进行解析,如下图所示

在这里插入图片描述

5、查询优化器

在经过SQL解析器的解析后,我们从SQL语句中提取出了关键的信息,例如id,name,等等关键信息,我们现在知道了我们的目标数据是那个表中的哪一行等等这些信息,比如,我们要查询user表中id=10的那一行的name,age信息,并且这个表中有30000个数据,现在的问题是我们应该如何去进行查询呢?打个比方:是先从30000个数据中查出来id=10那一行的数据然后再筛选要查询字段,还是先筛选字段再从30000个数据中查询id=10的那一个?(这个仅仅是例子并非原理),实际中可能有很多种查询方法,我们称之为查询路径,它们共同构成了一颗查询路径树,有了查询路径树了之后,我们还需要从中选择出一条最优的路径。上述的工作,我们交由查询优化器进行处理

在这里插入图片描述

6、调用存储引擎

现在,我们已经得到了最有查询路径,就像是已经知道怎么做了,下一步就很简单了,就是执行得到的查询路径即可,这一步,我们交给存储引擎来处理,为什么呢?我们分析一下便可理解,首先,我们都知道,数据是存在磁盘中的或者是内存中的,我们怎么去知道哪些数据在内存中,哪些数据在磁盘里?为了解决这个问题,我们就需要一个专门处理数据查询、更新、增删等操作的存储引擎,如下图所示

在这里插入图片描述

7、执行器

了解了存储引擎之后,我们在回过头来想一个问题,存储引擎可以帮我们去访问内存和磁盘上的数据,并且存储引擎的种类也很多,那么是谁来调用存储引擎的接口呢?我们之前说的查询优化器的作用只是生成最优查询路径,他并没有负责调用存储引擎。其实,我们漏了一个执行器,它的职责主要是根据优化器生成的执行计划,不停的去调用存储引擎的各种接口去完成SQL语句的执行

在这里插入图片描述

讲到这里,想必大家对SQL语句执行流程有了初步的了解,之后我会更新存储引擎是用来作什么的,如果你有什么疑问,欢迎评论留言

猜你喜欢

转载自blog.csdn.net/weixin_44829930/article/details/110017451