马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
x
大纲(2426字)
1.MySQL驱动的作用
2.Java体系中的数据库连接池的作用
3.MySQL中的数据库连接池的作用
4.网络连接必须让线程来处理
5.SQL接口会负责处理吸收到的SQL语句
6.查询解析器会让MySQL读懂SQL语句
7.查询优化器会选择最优的查询路径
8.调用存储引擎接口来真正执行SQL语句
9.执行器会根据执行计划调用存储引擎的接口
1.MySQL驱动的作用
如果要在Java体系中访问MySQL,必须在体系依靠中参加MySQL驱动。有了MySQL驱动才能和MySQL建立连接,然后才能执行各种SQL语句。下面maven配置中就引入了一个MySQL驱动:- <dependency>
- <groupId>MySQL</groupId>
- <artifactId>mysql-connector-java</artifactId>
- <version>5.1.46</version>
- </dependency>
复制代码 如果Java体系要访问数据库,首先得与数据库建立一个网络连接。那么这个连接由谁来建立呢?其实就是由MySQL驱动来建立的,它会在底层与数据库建立网络连接。有了网络连接才能去发送哀求给数据库服务器,如下图示:
当Java体系和数据库有了网络连接后,Java代码才能基于这个网络连接去执行各种各样的增删改查SQL语句。如下图示:
所以MySQL会提供各种语言的MySQL驱动,让各种语言编写的体系通过MySQL驱动去访问数据库。
2.Java体系中的数据库连接池的作用
一个Java体系肯定不会只和数据库建立一个连接。因为Java体系本身会有多个线程来并发地处理多个哀求。如下图示:
这时如果Java体系中的多个线程并发处理多个哀求时,都要劫掠一个连接去访问数据库,那么其服从肯定是很低的。
如果Java体系中的每个线程在每次访问数据库时,都基于MySQL驱动去创建一个自己用的数据库连接,然后执行SQL而且在执行完SQL后再销毁这个数据库连接,如许也是不可行的。
因为可能出现Java体系中上百个线程并发频仍创建和销毁数据库连接。而每次建立一个数据库连接都很耗时,从而导致哀求处理的服从很低。
所以一般会利用一个数据库连接池,在一个池子里维持多个数据库连接,让多个线程利用里面的不同的数据库连接去执行SQL语句。执行完SQL语句后,不要销毁这个数据库连接,而是把连接放回池子里,以便后续还可以继承利用。
基于如许的一个数据库连接池机制,就可解决多个线程并发创建和销毁多个数据库连接去执行SQL语句的问题。
常见的数据库连接池:DBCP、C3P0、Druid等。
3.MySQL中的数据库连接池作用
任何一个Java体系都应该有一个数据库连接池去访问数据库。也就是这个体系会有多个数据库连接,供多线程并发的利用;如许MySQL就需要维护与Java体系之间的连接,所以MySQL架构体系中的第一个环节,就是连接池。MySQL中的连接池就是维护与Java体系之间的多个数据库连接。
除此之外,Java体系每次跟MySQL建立连接,MySQL都会根据Java体系传递过来的账号密码进行库表权限的验证。
4.网络连接必须让线程来处理
假设MySQL服务器的连接池的某个连吸收到了某条SQL语句的网络哀求。那么谁负责从这个连接中去监听网络哀求?谁把网络连接里的哀求数据读取出来?
网络连接必须得分配给一个线程去处理,由一个线程来监听哀求以及读取哀求数据。比如从网络连接中读取息争析出一条SQL语句哀求。
5.SQL接口会负责处理吸收到的SQL语句
当MySQL的工作线程从一个网络连接中读取出一条SQL语句后,此时会如何执行这个SQL语句呢?MySQL内部会提供一个组件,就是SQL接口。
SQL接口是一套执行SQL语句的接口,它专门用于执行Java体系发送给MySQL的增删改查SQL语句。所以MySQL的工作线程读取出SQL语句后,就会转交给SQL接口执行。
6.查询解析器会让MySQL能读懂SQL语句
假设有这么一条SQL语句:- select id,name,age from users where id = 1;
复制代码 那么查询解析器(Parser)会负责解析SQL语句,比如查询解析器(Parser)会对上面这条语句进行拆解成以下几个部门:
一.需要从"users"表里查询数据
二.查询"id"字段的值等于1的那一行数据
三.对查出来的那一行数据要提取里面的"id,name,age"三个字段
所谓SQL解析:就是按既定的SQL语法,对传递进来的SQL语句进行解析,然后理解该SQL语句的意图。
7.查询优化器会选择最优的查询路径
当MySQL通过查询解析器理解SQL语句要干什么后,接着就会找查询优化器(Optimizer)来选择一个最优的查询路径。
查询优化器(Optimizer)会针对SQL语句天生查询路径树,然后从里面选择一条最优的查询路径出来。
8.调用存储引擎接口来真正执行SQL语句
获取到查询优化器选择的最优查询路径后,即应该按照一个什么样的次序和步骤去执行这个SQL语句的计划,MySQL就会把这个计划交给底层的存储引擎去执行。
这个存储引擎是MySQL架构设计中很有特色的一个环节。对于数据库而言,数据要不就是放在内存里、要不就是放在磁盘文件里。
现在已知SQL语句会按照最优的查询路径进行执行,但MySQL怎么知道哪些数据在内存里、哪些数据在磁盘里?执行时是更新内存的数据还是更新磁盘的数据?如果更新磁盘的数据,要先查询哪一个磁盘文件,再更新哪一个磁盘文件?这些问题就需要存储引擎来解决了。
存储引擎在执行SQL语句时,会按一定的步骤进行一系列操纵。比如查询内存缓存数据、查询磁盘数据、更新磁盘数据等。
9.执行器会根据执行计划调用存储引擎的接口
存储引擎可帮助MySQL去访问内存及磁盘上的数据,那么谁来调用存储引擎的接口呢?那就是执行器。
执行器会根据查询优化器选择的执行方案,去调用存储引擎的接口。执行器会按照一定的次序和步骤,去执行SQL语句的逻辑。
比如执行器首先会调用存储引擎的接口去获取"users"表中的第一行数据。然后判断一下这个数据的"id'字段的值是否等于SQL语句盼望的一个值。如果不等那就继承调用存储引擎的接口去获取"users"表的下一行数据。
基于类似思绪,执行器会根据查询优化器天生的一套执行计划,不绝地调用存储引擎的各种接口去完成SQL语句的执行计划,从而不绝地更新或者查询获取数据。
总结:MySQL驱动 -> 数据库连接池 -> 网络IO线程 -> SQL接口 -> 查询解析器 -> 查询优化器 -> 执行器 -> 调用存储引擎接口
SQL的执行流程:
一.由MySQL工作线程去监听网络哀求和读取网络连接的SQL数据;
二.MySQL工作线程读取出SQL语句后会转交给SQL接口去执行;
三.通过查询解析器Parser解析SQL语句让MySQL能看得懂SQL逻辑;
四.通过查询优化器Optimizer选择最优的查询路径;
五.由执行器按照查询优化器选择的执行计划不绝调用存储引擎接口;
六.存储引擎接口会查询内存缓存数据、查询磁盘数据、更新磁盘数据等;
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |