一般数据库会有多个系统去请求它,之后会基于MySQL去创建一个数据库连接,但是多个系统请求一个数据库连接的时候,会出现并发问题影响效率,所以要建立一个数据库连接池,供多线程并发的使用,数据链接池具有
资源重用
更快的响应效率
实现多个系统同时去访问一个数据库
统一管理,避免了数据库资源泄露
等优点。
当有数据请求的时候
1、由线程读取网络连接中的请求数据
2、 SQL接口(SQL Interface):负责处理接收到的SQL语句
3、 查询解析器(Parser):由查询解析器将sql语句进行解析
我们现在要从“users”表里查询数据
查询“id”字段的值等于1的哪行数据
对查出来的哪行数据要提取里面的“id,name,age”三个字段
4、 查询优化器(Optimeizer):选择一个最优的查询路径
理解所谓最优查询路径的意思) :
1,直接定位到"users"表中的"id"字段等于1的一行数据,然后查出来那行数据的"id,name,age"三个字段的值就可以了
2.先把"users"表中的每一行数据的"id,name,age"三个字段的值都查出来,然后从这批数据里过滤出来"id"字段等于1的那行数据的"id,name,age"三个字段
上面这就是一个最简单的SQL语句的两种实现路径,其实我们会发现,要完成这个SQL语句的目标,两个路径都可以做到,但是哪一种更好呢?显然感觉上是第一种查询路径更好一些
所以查询优化器大概就是干这个的,他会针对你编写的几十行、几百行甚至上千行的复杂SQL语句生成查询路径树,然后从里面选择一条最优的查询路径出来。
相当于他会告诉你,你应该按照一个什么样的步骤和顺序,去执行哪些操作,然后一步一步的把sQL语句就给完成了。
6、调用存储引擎接口,真正执行sql语句
msql的存储引擎又分为多种,常见的有InnoDB、MyISAM、Memery,将数据存入内存或者磁盘
存储引擎其实就是执行SQL语句的,他会按照一定的步骤去查询内存缓存数据,更新磁盘数据,查询磁盘数据,等等,执行诸如此类的一系列的操作,如下图所示。
7、执行器:根据执行计划调用存储引擎的接口
执行器会根据我们的优化器生成一套执行计划,然后步行的条用存储引擎的各种接口去完成SQL语句的执行计划,大致就是不停的更新或者提取一些数据出来,看下图示意