00:00
好,那关于第五节呢,角色呢,咱们就告一段落了啊,那这样的话呢,咱们这一章里边的重点内容,用户权限和角色呢,咱们就整个呢讲完了,那讲完之后的话呢,这块我们还剩两个小节,一个呢叫配置文件的一个使用,另外呢叫做系统变量,那这两节内容呢,整体量整体上来讲呢,属于了解性的内容。啊,那为什么要加一个这个第六节呢?呃,叫配置文件的一个使用啊,咱们在讲上面的时候呢,其实就在这个麦点ini这个文件当中,咱们在5.7这个版本中是不是就配过那个,嗯,这个叉赛那个server啊集是UTF8是吧?啊这个我写成大写的话呢,就是UTF8这样子的,咱们在这个下篇my.cnf当中呢,咱们也配过,那这呢,其实就咱们配置这个具体的信息了,都在这个配置文件当中,嗯,也没有这个具体的去讲一下这个配置文件上具体怎么写上来就告诉大家你加上就行了,发现呢,很多的书啊等等也都是这样子的,那默认好像大家都会似的是吧?那如果呢,你是一个零基础学习这个MYSQ呢,多少会感觉有点奇怪啊,那这里呢,我们就把这个小短板呢补一下啊,整体上来讲呢也不难,但是如果说大家已经做过开发了,那对这个事儿呢,其实就不陌生,为什么我们在这个应用层呢,做一些配置文件,不管你是点pro格式的,还是说呢,是点叉L格式的,其实我们这个格式呢,都是类似的啊,大家呢就并不陌生了。
01:20
这个呢是针对我们这个配置文件的一个说明,另外的话呢,我们再去这个相当于说明一下,在配置文件当中啊,咱们其实是可以有多组这种标签的,那不同的标签这个作用是什么啊,是不是说我们这个在启动某一个命令的时候呢,就会只是使用某一个标签呢?诶这个也不一定啊,我们就把这个内容呢,也给大家呢做一个解释。好,那首先的话呢,我们先看一下,比如说呢,在咱们这个啊MYSQL8.0当中对吧?嗯,首先我做一个退出,然后呢,咱就做vim啊ETC,然后MY.cf在这个配置文件当中啊呃,我们就能看到这个MYSD啊这样的一个标签是吧?它下边呢,就对应了相关的一些这种操作,像这种啊一个前面一个说明一个等号,后边又说明,我们把它呢,可以称为呢叫做建支队类型特点的。
02:11
啊,通过这个键是吧,我们就找到它对应的这个值是什么了。那就是这样一个场景。啊,像咱们这个,呃,数据库的这个数据文件,咱们是不是就放在这个变量当中了,咱们当时还这个查看过是吧?收where bos查看一下它,诶就就恰好这个指是他这叫数据目录,那除了这种格式之外呢,还有一种格式呢,就是长类似于这样子的。比如说这块呢,叫disable啊log b,那我们这呢是一个注释表示呢,就不起作用,在咱们这个MYSQL服务器启动的时候呢,我们就会加载这个配置文件,对吧,这个文件配置文件当中凡是加井号的,我们就不去加载了。啊,就是这样一个问题,后续呢,咱们讲解到这个,比如说这个日志文件的时候呢,咱们还会去配咱们相关的这个,呃配置文件,所以这块呢,我们基于这个点呢,也有必要呢去说一下,好整体的格式的话呢,就只有两种啊,这种类型呢,其实它体现的就属于这种true和false的一种结构,比如说我们这块呢,到底要不要使用这个啊blog是吧?哎,这是一个true跟false的类型,这呢属于这种建类型的。
03:11
OK。行,嗯,这是我们说的这个事儿,然后另外的话呢,就涉及到咱们这里边儿的具体的三角启动命令啊,跟选项组启动命令是什么呢?就是咱们这个比如说在启动,呃,这个用户登录的时候呢,咱们用的这个MYSQL这样的一个指令,还有其他的一些具体的指令,这个指令的话呢,咱们前面讲这个数据目录的候呢,其实也都提到过这个问题了。还记得吧,比如我这块呢,先退出一下,咱们通过这个饭。这个斜杠,然后呢,这个name叫MYSQL啊做个查看,这里边儿呢,存放的是我们这个数据目录了,然后在这个里边呢,放的是咱们的这个相关的指令吧。对吧,那我这块呢,CD一下USR这个叫bin啊B就看bin下边就行啊iOS,然后下边的话呢,你能看到MYSQL相关的一些这种指令。啊,这块卖效果是不是这块这这都算是。
04:02
这里边有一部分,还有一个目录呢,咱们当时也说过呢,是这个CD啊,US2呢叫SBN是吧,它下边呢,也有关于MYSQL的,应该是有两个吧。一个他一个他对吧,那这两个指令行,那如果呢,我们通过相关的这种指令,在启动这个MYSQL的时候啊,或者叫调用MYSQL一个相关的这个指令的时候,我们会启动哪些标签呢?那首先呢,这些标签呢,都是位于我们这个配置文件当中,然后这块呢,做了一个说明,比如我们当时呢,去使用MYSQL个指令呢,去呃以指定用户做登录的时候呢,我们就会调用这样的两个。啊,调用这样来的两个,OK,这里边有俩特别的这个标签组,一个呢叫server,一个叫client,它呢,呃,将作用于我们所有的这个服务器端的程序,它呢作用我们所有的这个客户端的这个程序,啊这个大家注意一下。好,这呢,就我们说的这个事儿啊,知道了我们在调用相关的指令的时候呢,我们到底会启用哪一个标签组,所以呢,呃,基于这个事儿的话呢,有的时候我们会看到,呃,比如说你要解决一个具体问题,然后发现需要做这个配置,在配置文件中去声明,然后呢,诶有时候你看一个帖子,他就只是会告诉你说啊,你在这个标志下边加个什么东西,在这个标签下上加个什么东西,那这个时候呢,你就会想,诶到底这个会不会去加载,什么时候加载啊,谁影响了它会加载啊,这块呢就做了个说明。
05:20
啊,OK,行,这是我们说的这个事儿啊,大家做一个了解就可以了,然后这块还涉及到叫特定的MYSQL版本的一个专用选项,然后你比如说我们上面是不是有个叫MYSQLD对吧,那我们呢,还可以自己去定一个叫MYSQL杠啊D杠五杠5.7就是呢,对于5.7这个版本的MYSQLD呢,我们在调用这个指令的时候呢,它会起作用,不是5.7版本呢,它就不会起作用了。啊,这就专专用的一个选项组是吧。啊,这是一个事儿。然后的话呢,我们会看到啊,你比如说我们在去调那个MYSQD的时候呢,它会把这两个选项组呢,是不是都进行加载,那你这两个选项组下边这些变量呢,也都会去加载到这个内存当中,那如果说这两个标签组选项组下边这个呃生命的变量一样了,怎么办呢?比如我们搜索下呢,有一个啊默认的呃叫存储引擎叫in DB啊MYSQD下面用的是这个MY啊这两个你看设置的变量,呃是同一个变量,但是值不一样,那如果呢,我们要是使用这个MYSQD这个指令呢,启动的时候呢,那他俩呢,你看是不是就看似是一个矛盾的呀,那到底以谁为主呢?诶我们说呢,就是看谁是最后一个声明的,这两个的话呢,我们是后写它,所以呢,最后呢,就用的是MY。
06:31
啊,你要把它俩颠倒过来,就用的成了印度DB了。哎,这个是出现多个子中的同一个这个变量的时候怎么办?好,这是一个,那另外一种场景呢,就是我们针对一个变量的话呢,咱们一方面呢,可以在配置文件中去写,还可以呢,是不是在启动命令的时候,我们可以临时的在后边再补充一个关于这个变量的一个赋值啊。那这个值跟这个值又不一样了,那此时以谁为主呢?我们说以命令行中的这个启动选项为主,那就是以它为主啊,这个大家注意一下。
07:01
好,那这里边儿呢,我们在这个选项组下边呢,声明的这个呢,叫建制,就是特点呢,其实就是变量了,那这个变量的话呢,其实就涉及到了我们所谓的叫系统变量,咱们在讲到这个上篇的时候呢,关于系统变量呢,其实整体上的内容呢,都做了一个讲解,来我们看一下这个课件。啊,变量。哎,我这块呢,其实就不想着再去花大的太大的篇幅呢去讲解了,变量的话呢,我们分成系统变量和用户变量,然后系统变量又根据它是global修饰和session来修饰,又分成了叫全局系统变量和绘画系统变量,对吧?然后我们涉及到关于这个变量的一个查看呀,呃,一个查询,然后设置是吧,这样的一个问题,那回过来这块呢,我们想给大家强调的点是什么呢?这个系统变量的话呢,我们除了。你看这里边涉及到我们是不是可以理解成是临时的方式做一个set,对吧,你是global还是session啊,可以做这个set,除此之外的话呢,咱们还可以啊,那就是在这个配置文件当中呢,我们去做这个声明。那那配置文件中这种声明方式呢,我们可以理解成是这种永久性的方式,那通过这种指令去写的呢,可以理解成是临时性的这种方式,那刚才我们也看到临时性这种方式的优先级是不是比较高一些?
08:12
或者我们也可以看作是呢,先呢加载的它,它变成的是这个十,那我们要是这块呢,再去用这个指令的话呢,对原来十可以是个覆盖,比如这块我们改成20,那就以20为主了,对吧。行,那么具体的关于这个变量呢,它的一个分类啊,跟咱们讲的上篇呢,其实是一样的,包括呢,我们也提到了有一些啊,大部分这个变量呢,是既是全局的啊,就是global的,也是这个session的,我们可以这个看看你在什么场景下呢,设置什么样的值,然后有部分的话呢,只是global的,也有部分呢,只是session是吧?哎,这个咱们在讲上的时候呢,都提到过这个问题了。啊行,下面呢,关于查看呀,那关于去设置啊,那咱们前面呢,这个临时的赛的方式也都讲过了啊,就不多说了,行这呢是作为一个复习,那我就放在这儿了,大家呢,想看的话呢,你再结合着我们这个笔记呢,再扫一眼就行,那么这一章啊,咱们就到此为止,重心啊,这个用户权限和这个角色啊,这个在我们实操当中呢,是非常有用的。
09:11
好,同学们,咱们接下来学习这个第四章啊,叫做MYSQL的逻辑架构啊,这一章呢,还是我们偏向于这个底层,相当于我们来查看一下咱们的比如说SQL语句在整个的执行过程当中啊,在我们这个服务器层面,它的一个执行的过程是什么样子的,好,那我们这里来看一下,这儿呢,我一共分成了这样的几个章节啊,来进行这个讲解,首先呢,我们来看一看,整体上对于这个逻辑架构呢,进行一个剖析。这里边呢,首先提到了说MYSQ啊,我们说是一个典型的CS架构的,我们通过具体的客户端,然后去访问我们的MYSQL服务器,对吧,那服务器端使用的就是MYSQLD啊这样的一个服务,那不管呢,是我们客户端进程还是服务端进程采用什么方式进行通信啊,整个的效果呢,也是非常的清晰的,那就是说我们客户端呢,相当于发送具体的请求,对吧,发给我们数据库服务器,那么数据库服务器呢,暂时来看呢,就像一个黑盒子一样,它呢能够接收来自于客户端的请求,然后具体的里边细节一顿操作,那比如我们是进行一个查询操作,对吧,那最终呢,我们是肯定要,诶这个找到是不是我们在文件系统当中,这呢,就是我们具体物理磁盘上的文件了。
10:22
从这个文件系统当中呢,我们把这个想要的数据呢,查询到,然后呢,是不是再返回给我们的具体的客户端呀。那我们称为呢,这个过程呢,叫做一个响应,那中间的这个环节呢,我们需要通过网络的方式呢来进行连接,那么刚才呢,提到了说我们这个黑盒子,这个黑盒子呢,就是我们所说的MYSQL服务器端,那我们称为呢,就是一个逻辑架构了,这儿呢,简单的罗列了一下我们这个逻辑架构里边执行的一个具体过程,我们呢,可以把这个过程呢分成三个部分。第一个部分呢,我们称为呢叫连接管理,相当于呢,我们能够处理来自于客户端的这个连接啊,针对这个连接请求呢,我们先要保证能够连接成功,对吧?比如说进行一些用户名密码的一些校验,包括呢一些权限的校验,就是你是否具备查询相关这个SQ对应的表的这样的权限,那么第二部分呢,我们称为呢叫解析与优化。
11:14
就是我们针对呢,写的这个SQL语句啊,更主要的比如我们说是一个查询语句,我们需要呢,把这个查询语句呢,进行一个解析,生成一个解析数,然后呢,诶对这个SQ语句呢,还要进行一个优化处理,那这块呢,我们一会儿展开来讲,现在大家听可能有点懵,好那么处理以后的话呢,我们第三部分的话呢,就是真正呢,是调用咱们相关的这个存储引擎来对物理磁盘上的文件呢进行一个查找操作,当然这个查找操作的话呢,我们不可能是针对,呃不可能是直接呢跟物理磁盘的文件呢,进行一次一次的交互,这个效率呢实在是太低了,我们还会把这个物理磁盘上的这个文件呢,是把它呢,先加载到我们这个内存当中来进行一个查找。对吧,这个细节的话呢,就是我们后边要讲的这个叫这个八福铺啊,叫做这个缓冲池啊,就我们下边这样一个概念。
12:03
好一会儿呢,我们再说到这个事儿,行,那这儿呢,我们先简单的把它分成了三个环节,那这个图的话呢,是一个简图,详细一点的要画的话呢,会涉及到了这样一些结构。这个图的话呢,大家在网上找也肯定是能够找到的,属于比较经典的一个图,那我这里呢,就没有必要呢,再进行一个重绘了,因为我重绘以后呢,跟那个长得不一样,大家看到经典的反而不认识了,对吧,所以我就用了诶咱们说的比较经典的这样一个图,但是这个图呢,叫经典,其实还意味着有一个细节,就是它这个图啊,稍微有点老,那什么意思啊,我们这个图的话呢,你要说针对于是MYS5.7啊是没有问题的,但是你要说这个8.0相对于我们这个5.7呢,是有一些变化的,这个图呢,是不是很好的能够展现8.0呢,其实是不对的啊,比如说8.0当中典型的就是我们把这个查询缓存这个结构呢,就给干掉了啊,所以说这个图呢,我们叫经典呢,其实它可以看作是针对于5.7的。
13:00
OK,那么这张图的话呢,咱们先简单的我进行一个介绍啊,先简单的来进行一个介绍,这儿呢,我这么着处理,把这个呢先截一下。啊,截一下之后呢,咱们这儿呢,去写一些文字性的内容啊,大家呢,先对它进行一个整体的一个了解啊,首先的话呢,我们这里边看到这个叫是不是叫啊,这个你可以翻译成中叫连接器,那其实呢,就相当于是我们刚才提到了MY数据服务器呢,是CS架构的,那这个呢,是不是就我们所谓的这个client叫客户端呀,啊所以这块呢,我们就诶MYS相当于是咱们MYS这个服务器之外的是不是客户端程序啊。诶,客户端程序好,这个呢,就是我们对应的一个叫collectors,那这里边的话呢,大家,呃,正常来讲啊,应该接触过其他的一些编程语言,你比如说像我们这个Java当中的话呢,咱们使用的是不是就这个GDBC,通过JDBC呢,我们实现对数据库的一个连接,对吧?那这块呢,就相当于是跟具体的语相关的啊与具体。
14:03
啊,这个编程语言相关的这个内容,好,这呢是咱们说的叫collectors,然后的话呢,我们往下再走,就看到了整个我们MYSQL服务器端相关的一些组件,那么这个组件呢,我们就从左边来说吧,首先的话呢,我们看到这个位置叫service啊,Utilities这个我们可以看到呢,就是MYSQL服务器的叫基础服务组件。啊,基础。副组件好,那这呢我们就不多说了,然后呢,这个位置呢叫连接池,那一看这个翻译的话呢,是不是就非常清楚啊,就是英文翻译过来叫做连接池。行,大家呢,应该听说过这个连接池这样的概念,好,那我们这个连接池那做什么用呢?当然我们后边呢,还会详细来展开说啊主要的话呢,就是我们这个客户端呢,过来以后进行连接,我们针对于此次的比如说TCP的连接,它是一个长连接,然后呢,我们还可以专门的在MYSQL服务器端呢,咱们分配一个呃,线程是不是来处理当前的你这次连接啊啊所以连接池的话呢,我们相当于是啊,就提供了就是多个。
15:09
哎,这个用于。啊,连接池啊,提供了多个用于是不是客户端。啊,这个进行操作的啊,客户端与服务器端。呃,这个交互的。呃,这个叫线程是吧。县城。那这个线程的话呢,在使用完之后的话呢,是不是还回到呃,还回到我们这个连接池,供其他的这个客户端在访问的时候呢使用,对吧?诶这就不会出现资源浪费的一个问题了,然后呢,再往下这块呢,你看提到一个这个啊,我就直接写这了,叫circle interface啊,那自然而然翻译成了是不是叫circle接口啊。OK啊,诶这个我们就要circleq接口,那么这个circlel接口它主要作用是什么呢?诶我就直接写到这儿了啊盖着这个后续后边这个,呃,这个描述了这个circlel接口呢,呃,你一看这个名字就知道了,它主要呢,就是用来接收SQ指令,并且呢返回啊查询结果的,那如果你要这个查询的话呢,它会有个结果返回,对吧,我就这块简单写一下,就要接收咱们的这个色扣指令,然后返回啊查询结果,OK,呃,结果。
16:22
啊,这个呢是我们说这叫四后接口啊,我就直接呢往右说了,这个呢叫passer,那翻译过来呢,自然而然是不是叫解析器啊好,我这块写一下。啊,解析器这个解析器,解析器解析什么呀,是不是就解析我们刚才说的这个S口接口中的这个口啊,啊,那这个解析呢,都具体有什么解析啊,哎,我们说分成呢,叫做哎语法解析啊,还有这个像语义解析。啊解析。啊,一会儿呢,咱们再说这个解析到底是做什么的啊,呃,那么最终效果呢,它会生成一个叫做呃语法数,哎,这是一个树形的结构。
17:00
啊输输赢结构,然后生成语法数以后呢,便于我们后续呢,进行一个查询的优化啊,进行优化,那如果说我们这个SQL语句呢,写的有问题的话呢,那么此时在我们这个解析的环节就会出现啊类似于呢,我们称为呢叫一个庖丁解牛啊,什么意思啊,就是我们把这个色库语句呢,给它肢解了,肢解成一小块一小块的啊,比如这个是关键字,这个呢是表名啊,这个呢是字段名啊等等的,都是在我们这个解析这个解析器这个环节呢去做的,下边这个呢,就是自然而然翻译过来呢,就是叫优化器,对吧?来我这写。啊,这叫优化器,顾名思义,那就是对于我们这个SQL语句呢来进行优化的,那比如说确定一下你是否需要使用索引呀,我们这个多表的这个连接的顺序应该是什么样子呀?啊,我们这个外连接是不是还有可能会转成这个内连接呀,啊啊等等,包括一些呃表达式的一些更新啊,这都是我们这个优化器要做的事儿,这也是咱们后续,咱们后续呢,是不是讲索引还要讲优化,测后优化主要针对的其实就是这个,呃优化器这块来展开讲解的。
18:01
啊,比如说我们这块写一下优化器呢,呃,这算是最核心的一个组件啊,核心组件诶对诶咱们这个circle呢,诶相当于进行了优化的,我就不详细的展开说细节了啊咱们到后边呢,专门来讲它,然后呢再往这边看,刚才我提到了在8.0当中呢,把这个哥们呢就给干掉了,那一会儿我们来讲解说为什么要把它干掉,首先呢,把它这个呃也起个名字,这呢就称为呢叫查询缓存。哎,它呢成为呢叫查询缓存啊,它呢是以这个KY6的这个方式呢,来缓存我们的查询结果的啊,这个我先写一下。啊以要K哎value的这个方式来缓存。哎,这个查询结果。呃,结果OK,那你大家呢,一看到缓存这个词呢,应该并不陌生了,那就意味着呢,咱们这个SQL语句呢,诶如果你查询完以后呢,它会把这个注意结果呢,诶是作为我们的value呢缓存起来,那K是谁呢?K就是咱们这个circle这个语句,然后当你下一次的话呢,如果呃查询的这个circle跟之前这个这个circleq呢,是完全一样的,我这块用那个重心叫完全,后边我们讲怎么叫完全啊,那就好比是你这个circleq里边呢,有一个空格的变化呢,都不算是完全一样。
19:20
那如果要完全一样的话呢,我们就不用再去执行这一系列复杂的过程了,直接呢,诶就从这个K里边找到对应的这个查询结果,我们就返回了,诶相当于这个呢,是不是能提高我们查询的一个效率,对吧?好这呢是我们要查询缓存。然后再往下走的话呢,也是我们一个叫插件式的存储引擎啊,这个我写到这边吧。那插件式的。呃,这个存储引擎,那引擎那插件式的存储引擎,这个插件式是什么意思啊,就意味着我们是不是可以在这个查询的过程当中可以替换啊,比如我们这时候用的是my Sam,我们可以替换成印度DB是吧?印度DB呢,可以替换成my Sam啊,就是这时候呢,可以是个呃插拔式的啊这样一个概念,好,那这个存储引擎的话呢,我们这个按照计划分类呢,诶按照这个计划呢,呃分类这个执行。
20:14
OK,然后具体这个细节的话呢,我们到时候再展开啊,那我们调用这个存储引擎,这个存储引擎呢,再去底层的这个物理磁盘上啊,我们进行数据的一个操作啊,是相当于我们这个插件式的这个存储引擎,它与底层这个文件系统进行交互啊,我就写一个这个。啊,底层的啊,这个文件系统啊,进行这个交互。那刚才呢,我也提到一个事儿,就是我们这个交互的话呢,比如说咱们要查询某个表中的一条记录,并不是拿这个物理磁盘上这个文件啊,这个磁盘上的我们来这块呢去查找,查找完以后呢,返回给我们这个客户端,不是的,我们是不是要把这个呃数据呢,还要加载到内存当中啊,因为我们知道这个CPU跟磁盘交互的话呢,那这个差别太大了,那我们CPU呢,是通常跟内存交互,内存在是跟我们这个磁盘交互,对吧?OK。
21:05
呃,最下边这块呢,这叫呃,我们通常这也可以看到这个这个英文名翻译过来呢,叫文件系统,就相当于呢,我们存储在底层当中的这个数据库文件了,咱们在上一章当中,这不也提到这个文件系统的概念了嘛,然后这块呢,对应的是一些呃日志文件啊,日志文件,比如说我们后边呢,会讲到的跟事务相关的啊,瑞意度日志,安度日志啊,包括这个B劳日志啊,慢查询啊等等啊一些日志文件。OK,这儿呢,我就先简单的是把这几个词儿呢,先翻译了一下,然后的话呢,诶,我再简单的说一下什么问题啊,就是咱们现在呢,比如说有一个查询过来了。那么这个查询过来之后呢,我们这块执行的一个顺序,诶是什么样子呢?来我们说一下啊,首先的话呢,我们从这个客户端这块儿来发起一个对于服务器端的一个连接,对吧?诶你这块有对应的这个程序,那SQ的话呢,是不是就得过来了,过来以后的话,首先呢,我们先得呃建立这样的一个连接,建立连接以后,那我们得专门分配一个线程来处理我们这个测库语句,好,那这时候呢,就是我们这算是第二步,然后第三步的话呢,诶就相当于是我们这时候呢,得对接咱们这个接口。
22:18
啊,对于这个接口过来这呢,相当于是整体上我们的一个出入口啊,这个过来以后的话呢,呃,下一步做哪儿呢?呃,下一步咱们在5.7当中啊,咱们执行的实际上是这个。哎哟,长了个框了啊。诶执行的是这个,哎,换成一个红色的,那也就是说我们这个色后过来之后呢,我们先来看一看这个查询缓存当中啊,是不是针对你这个色后语句之前已经查过了。啊,如果查过的话呢,咱们就不用执行后边这一堆事儿了,直接呢,就把这个value呢,就返回给我们的这个客户端了,啊这就是这个第四步,那如果说我们要没有找到呢,没有找到的话呢,我们再来执行这个叫解析器。啊,针对我们这个SQ语句呢,把你直解开生成一个语法数啊,真的是一个树形结构,然后呢,哎,我们接下来的话呢,注意这个按说写完以后,哎,包括你这个circleq写的到底有没有问题啊,比如我们写个from这个M给没写是吧,那这时候他就报错了,这就是解析器这块来做的这个事儿是吧,词法解析语法解析啊这样的概念。
23:18
那么正常来讲呢,经过这个节气以后呢,我们就可以呢,呃,去底层来查询了啊,但是的话,咱们这块儿还多了一个操作,叫做优化器啊,叫做优化器这个呢,咱们刚才也说了,是MYSQ服务器很核心的一个内容,那我们这个测Q语句呢,只是分析出来你要做什么了,但是你写的这个测控呢,有可能效率比较低。啊,那这时候呢,他可以对你进行一个比如说逻辑上的一个优化,那那还可以呢,进行物理上的优化啊,诶我说的这些内容呢,大家呃,你可以先有个印象啊,诶下边我们都会有这样的对应的这个细节内容呢,再去展开说,还可以呢,进行物理上的一个优化,所以在物理优化呢,就是使用我们的这个索引。啊,这个大家呢,应该有这样的概念,就是我们用索引跟不用索引,呃对于一个查询来讲,它的效率呢,呃千差万别是吧,呃差别是非常大的,所以那个能不能使用索引,就是我们这个优化器呢来决策的。
24:13
那这呢是我们这个第六步,然后这一步完了以后呢,诶我们确定比如能用某一个索引了,尤其像这个表里边可能有多个索引,到底用哪一个呢?诶需要做一个选择对吧?那这六步完了以后呢,下一步呢,就是我们这个七,那它呢需要调用我们对应的这个啊API了啊这个我们存储的这API,那这呢体现为就是我们具体的个存储引擎,然后再回到我们这个文件系统当中啊,做这个具体数据的一个查找,当然这个前提呢,还是加载到内存中啊进行这个操作的对吧?好,那这个八完了以后,下边是不是马上就返回给我们这个客户端就完事了呢?诶这里边注意一个细节啊,我们还得再补一个这个九。啊,这个四跟九都在这儿,相当于呢,我们查询到的这个数据呢,咱们还要把这个circle和它对应查询出来的这个结果呢,缓存到我们这个查询缓存这,那当你下一次要过来的时候呢,是不是直接就可以从查询缓存里边找了,对吧?哎,就用不着再走我们这个,呃,这个5678这样的步骤了。
25:09
行,那这个酒完了以后呢,那接着呢,就相当于是以这儿啊,我们作为一个出口啊,直接呢,再返回给我们这个客户端,哎,再返回回去啊就完事了。啊,这就是我们整个这个过程啊,你这个线程呢,用完了再还到我们这个链接池当中,然后呢,这个诶再把这个数据呢,给我们返回给客户端是吧?诶整体上的话就是这样的一个环节。好,那我这个讲解的话呢,大家先有一个整体的概念啊,这个讲的内容的话呢,就基本上涵盖了我们要说的这个第一节和第二节的这个点,我把这个图呢先保存一下。放到这个桌面上,咱们称为呢,叫IMY。哎,服务器的,哎,端的这个逻辑架构啊,说明。好,我把它呢,放到咱们这个课件的这个资料里边啊,大家到时候直接去找就行了啊,高级特性啊,放到我们这个资料里边啊,把这个呢保存一下。
26:03
啊就可以了,好,那么刚才呢,我们说的是一个整体上的一个情况,那下边呢,我们再稍微的展开的把这个再呃磨叽一下啊再啰嗦两句,首先呢,你看这块提到是不是叫这个,这个叫ors是吧?诶针对于不同的语言的话呢,我们需要跟服务器呢进行交互啊这个结构呢,就是connectors啊建立连接是吧?OK,然后具体往下的话呢,诶,我这写了叫第一层,第二层,第三层分别对应的呢,就是我们的这是第一层。啊,也就是我们这里边的叫连接层啊,注意我这块一边说呢,大家一边去记啊,就说到我们MYS后服务器的这个逻辑架构呢,分成哪三层呢?诶你要能够说出来这是第一层,然后第二层的话呢,就是我们这一层,咱们称为呢叫做服务层。啊就是这个叫服务层,然后第三层呢,就是我们称为呢,叫做引擎层,哎就是这一层,哎这个图呢,诶过来这样子啊,一层两层三层,那我说诶这一层不算吗?啊存储层你看我这块还写的叫存储层对吧?这个存储层的话呢,从咱们整个这个过程上来讲啊,你包括这个的话呢,你这样一说,我这写的这还分成五层了呢,啊其实不能对吧,因为这一块呢,不是咱们数据库,诶麦库这个服务器了啊麦库服务器呢,我们叫DBMS是吧,数据的管理系统,这个管理系统的话呢,它不包括具体客户,它也不包括呢,我们实打的这物理磁盘上的是吧,把这两块呢都得掉啊,它包括其实就是我们说的连接层,服务层,还有这个叫,诶这个引擎层啊就这三层。
27:32
好,那么下边呢,我们来看一看啊,刚才这个图咱们不是也讲过了,我把这个图呢,稍微的再盯一下啊呃,因为大家刚开始接触呢,这个图可能还有点陌生,好,那下边呢,具体我们说这个,呃,三层的时候呢,第一层叫做连接层对吧?连接层呢,主要就是获取针对于我们麦斯库服务器的一个连接的,这时候我们需要呢,去验证一下发送过来的用户名和密码呢?呃,是不是匹配,那不匹配的话呢,它会接收到一个叫access denied for user,密码写错了。
28:01
那通过验证以后的话呢,我们还会从这个权限表当中查询出账号应用的权限和连接的关联,咱们在上一章当中是不是专门讲了这个权限表啊,User表啊,DB表啊是吧,Table是吧,Column啊等等这样的一些表都是权限表。好,OK,下面呢说提到一个问题啊,说一个系统啊,相当于你一个具体的客户端啊,只会和MYSQL服务器建立一个连接吗。啊,下一个问题说只能有一个系统和MYQ服务器建立连接嘛,啊显然都不是是吧,那这时候怎么办呢?那既然我们要建立多个连接啊,一个系统呢,也可以建立多个连接,那这时候呢,我们就要提供一个连接池,对吧,这样的概念,这个连接池当中呢,涉及到两个啊,一个呢,就要TCP的连接池,它来限制这个连接数的啊使用这种长连长连接的这个方式,然后具体的话呢,我们还可以提供这个叫线程。啊,因为接下来我们进行这个呃,增删改查,尤其是查询这样的整个这样一个环节,是不是都得需要有一个线程来支撑啊,诶我们还有对应的这个叫线城市啊,所以这块呢,一个是叫连接啊,控制这个我们客户端的连接数量的啊另外一个呢,就是来呃这个控制我们具体来处理我们具体操作的这个线程啊,两个池。
29:16
好,这呢就是我们属于这个叫诶第一个环节啊,叫连接层啊,叫连接层这样的一个事儿,然后下边这一层,那下边这一层呢,这不就涉及到我们刚才说的这样的几个点是吧?那第一个呢,我们叫诶circle的interface啊,这个circle接口主要呢,来接收circle命令,然后返回查询结果的啊不多说,下边呢叫解析器啊,解析器的话呢,主要呢,就会生成一个解析数啊咱们具体的呃,一会儿讲到这个流程的时候呢,就会说到这个数,我简单先让大家看一眼。嗯,在这啊,诶你看这儿呢,是不是就实打实的是一个书形结构啊,相当于呢,就是我们把这个SQ语句啊,你写的一个SQ语句,把它呢,肢解成一部分一部分的。那就是一个树形结构,那这时候呢,你直解过程当中,如果发现呢,是有语法问题的,是不是就报错了,那这时候呢,报错信息相当于就是在我们这个,诶解析器这块呢发生的啊,在他这儿发生的。
30:09
好,然后再下边呢,叫optimism啊,这就我们说的叫,哎,是不是叫优化器啊。优化器啊,或者也可以称为它叫查询的啊优化器。这个查询优化器呢,这里边呃,最终呢,诶这个大家记一下啊,咱们后边也会提到了,就是它会在这个优化完以后呢,生成一个执行计划,就相当于我们在这个位置呢,已经确定了这个SQ,比如说没有问题了,按说呢是能执行了,但是别着急,诶我们优化器呢,执行完以后呢,有可能诶就是来决定啊,你到底是采用哪种方式去这个执行,比如说我们有一个。连接是吧?哎,我们写这个,诶,我写这个where的时候啊,是不是这个A表的一个字段跟我们B表的一个字段呢,去做连接,那我们到底呢,是从A这块呢,先找到这个,呃,或者and是吧,再加个and说A的这个值是多少啊,B的这个值是多少,那你说我们是先找A啊,找到这个值之后呢,再去找B中啊还是先找B在里边找A呢?啊这个时候呢,我们就要看一看锂液化气呢,该怎么去做决定。
31:08
那它是基于一个成本啊,搜狗执行的这个成本来进行一个判别的啊,就是说这个执行计划呢,它不一定啊,最终选择的是一个执行时间最短的啊,后后边我们说优化的时候呢,还会说。这个执行计划生成以后呢,那就真正确定了,我们到底该如何呢去操作了,那我们下边呢,再调的话呢,也就是我们这个,呃,存储引擎啊。嗯,这里边儿呢,我还写了一个内容啊,说它使用叫选取投影和连接的策略呢,呃,进行了一个查询,这个选取的话呢,其实就是针对我们这个where。啊,就是我们要查,比如说这一条信息,咱并不是找这个表中的所有的数据了,就是我只找这个满足这个条件的这个数据啊,就是属于一个过滤了啊,叫一个选取,然后这个投影的话呢,就是我们要找的也不是所有的字段,那我们找的是其中只有ID和name这两个字段啊,我们称为呢,就是具体的一个投影啊,选取投影相当于是结合来对吧。
32:01
好,具体这个查询缓存就是我们说的这个部分,嗯这个部分,嗯这个查询缓存呢,你注意,比如我们针对的是这个呃A这个客户端,呃这块呢,比如写了一个这样的,就是这个搜Q语句,查完以后的话呢,第一次的时候呢,这里边是没有缓存的,对吧,我们就按照刚才说的这个老老实实的去里边去操作,操作完以后的话呢,把这个结果呢,它会缓存到我们这个查询缓存里边,然后这个B这个客户端,诶去做个查询的话呢,它是可以使用咱们刚才A的那个查询的那个缓存的,相当于呢,是不是可以跨我们这个具体的,呃,你叫线程也好,叫进程也好,那去访问的是吧?诶这是一个共享的区域。好呃,不同客户之间,客户端之间呢,是可以共享的,然后这个结构呢,咱们在8.0里边给干掉了啊,大家可能会觉得说,诶,明明是一个加快我们查询速度的,怎么会干掉呢,主要原因是因为它命中率呢是极低的啊,一会儿我们展开来说这个过程。第三种呢,叫做这个引擎层啊,插件式的对吧,然后呢,我们可以呢,去自由的选择用哪一个,而且呢,开发人员还可以开发自己的啊存储引擎啊,这是没有问题的,它的作用呢,就是真正的负责了MYSQL当中数据的存储和提取。
33:12
然后对物理服务器级别维护的这个底层数据呢,来进行操作啊,这是我们说的这个事儿,那具体都有哪些,这个存储引擎呢?呃,下边呢,我们可以执行这个叫呃,Show engines啊这个指令的进行一个查看啊,比如说我们在这个8.0这个场景当中,呃,首先呢,我们先建立一个连接,对吧?诶MYSQL-u root用户啊,密码登录一下,然后我们可以呢去show啊,Engines。啊,这个engines呢,就是引擎的意思对吧?啊这里边呢,就罗列出来了,我们支持的存储引擎,诶都有哪些,这呢是它的一些特性,OK啊这个我们下一章呢,重点呢来讲解的就是这个存储引擎。然后最后那个呢,叫存储层,这没啥可说的啊,就是我们数据的真正存储在物理磁盘的这个文件上,诶这样一个概念啊,在咱们这儿呢,是不是就存储在那个呃腕呃是那个Li是吧?哎,下边比如我们具体这个数据库呗,哎,存储这个数据文件啊,这个数据目录还记得吧。
34:08
啊,就是我们,哎,当时不是执行过这样一个操作吗?叫做show啊,Wheres啊,Like啊,我们这百分号啊,是不是叫data第二吧,我记得。诶,前面这个是。改分号。这个诶写错了啊。重来。哎,这个英文格式下的是吧。嗯,Webs like data DR,哦,这个我们。这个去掉是吧?诶这个呢,是不是就列举出来我们这样一个目录了啊,相当于这个目录下放的就是我们实打实的这个数据库文件啊,就这样一个概念,好,那这块的话呢,我们就给大家呢,相当于把整个这个呃三层的这个结构呢,做了一个说明啊,做了说明简化的话呢,你就叫连接层,这叫服务层,或者写成SQ层,哎,存储引擎层是吧?OK,下边的话呢,我们再来讲解的话呢,就看一看具体的这个SQ执行的一个流程啊,也就是刚才呢,我再拿着这个图说事儿的时候呢,我是不是来了个1234啊,诶把这个过程呢,我们展开给大家讲解一下,以及呢,为什么我们要干掉这个存储引擎,呃,这个查询缓存,OK。
我来说两句