00:00
好,那么关于我们说的explain中各个字段的这个使用啊,咱们就告一段落了,然后大家呢,你会发现我下边呢,关于explain呢,是不是又加了一部分的内容,那这一部分内容呢,相当于让大家对plan呢有一个更全面的一个理解啊,那不管呢,是在实际生产环境当中,大家呢,可以去使用另外的话呢,呃,那么比如说你在这个面试当中啊,你也可以给面试官呢去谈一谈我们关于出战的下边的这些内容。啊,那同时呢,如果你要是个面试官,你也可以问问面试者啊,下边这个内容呢,是不是清晰对吧?哎,知其一也要知其二,那下边呢,我们看看这个内容主要讲什么。那这块呢,相当于是针对exce的这个输出格式呢,我们进行了一个说明,说这exce啊,它一共是有四种输出格式的啊,以前呢说可能没听说过对吧?啊这块我们讲一下,分别对应的呢,叫做传统格式,杰森格式,T格式和可视化输出,那其实这个可视化输出的话呢,呃,这个我们是使用的一个工具了哈,呃,你要严格上来讲呢,你可以理解成就只有这三种格式,那我们前面讲的这种,在explain呢,后边加上一个具体的查询语句,或者是一个update语句,Delete语句,那其实呢,我们理解为呢,就是一个传统的格式啊,所以这个呢不用多讲了,那么除了这种传统格式之外的话呢,还有杰森格式和tree格式,那写起来呢也非常简单,只需要的话呢,我们在传统的explain和这个查询句中间呢,大家加一个呢,叫做format等于杰森,那就对应的是我们的一个杰森格式,那如果说你把这个杰森呢,改成是这个tree。
01:24
那对应的就是我们这种tree格式啊,很好理解啊,那关键的就是说我们只是格式上的一个变化吗?有没有一些信息量上的一个差别,那我们说呢,实际上是有的,接着这种格式呢,给我们提供的信息量呢,就会更丰富一些。更丰富一些,来我们看一看,那么我们说呢,第一种这种传统格式当中啊,这个以当中缺少了一个衡量执行计划好坏的一个重要的属性,叫做成本。哎,大家想想是不是这样。啊,我们使用这个产品优化器说呢,有好几种这个呃计划可以去选择,但是最终呢,他选择了一个他认为成本最低的啊,然后呢,也呈现给我们了,那到底这个成本是有多少呢?对吧,它是怎么核算的呢?那这时候呢,我们说在传统的格式当中是看不到的,而杰森这种格式呢,几乎我们能够把这部分信息呢呈现出来,这也是我们选择杰森格式的一个主要的原因。
02:13
那关于我们用exce呢,还是使用这个杰森,就是传统的这还是使用我们这个杰森格式啊,它对应的这个字段的话呢,这个有一些区别啊,传统的话呢,比如说我们这个叫ID,那在我们这个S格式当中叫做select ID。那传统的叫tap,在我们这里呢,叫做access type是吧,诶对应的有这样的一个关系啊,其实整体来看的话呢,其实大家呢,理解起来难度并不大啊,因为呢,没有本质上的这样的一个太大的区别,基本上也是这个建明之意。那下边的话呢,咱们就给大家呢,举一个例子啊,咱们去说明,那这个例子的话呢,就是也是用的咱们S1和S2呢,这样的两张表啊,有一个这个呃,关于这个索引的一个连接,还有一个普通的一个条件啊,这个大家一看呢,也是比较熟悉的好,那首先的话呢,我们CTRLC呢,把它比如说放在我们这个SQL当中啊,CTRLV粘过来。
03:02
啊,这个where呢,比如我们给它换一下行啊这个呢,收起来,那我们的这个杰森格式,咱们在这里稍微的写一下啊,杰森格式的这个啊,Explain。我就写成小写了。好,那么我们只需要呢,在这加一个for等于杰森就可以了,来我们选中以后呢,做一个执行。啊,这时候呢,大家看到呢,就是它都集合在一起了,那就是可读性的差一些,你也可以把它粘出来,放到我们这个T写当中也行,是吧,这是一种方式,或者的话呢,咱们干脆呢,就不在这去写了,那怎么着呢?诶我把这个结构呢,CTRLC选中,放在咱们这个叉shell里边呢,去展示也一样,那首先呢,我们去明确下,咱们使用的叫艾特硅谷DB1是不是这样的一个数据库,然后呢,我们把它呢,诶粘过来,粘过来的话呢,咱这块呢,就换成这个叫杠G了,来回撤一下。啊,这个还行啊,信息量呢没有那么多啊呃,因为我们这里边呢,写的这个色Q呢,相对来说还是比较简单的啊,但是呢,整个这个格式呢,相对于我们用explain后边直接加起来来讲呢,看的好像是更多一些是吧?来我们稍微的进行一个分析啊。
04:05
呃,Excel整个呢,这就是一个阶层格式的,嗯,这个我们这样子吧,做一个对比,嗯,我把它呢再粘过来。好,大家看一下。我把这个位置呢,把它去掉。哎,我们再回车一下,哎哟这块。回车一下。别用这个杠G了,是不是得这么着,哎,走起。分号一下。好,我们把这个呢截着除。这样的话呢,我们就可以对比的方式呢,进行一个查看啊,这个咱们放在最上面。嗯,在这好可以了,首先的话呢,我们这个叫select ID,那就是对应的我们原来的这个ID,那这个值呢是一啊,然后这呢有个cost INF叫query cost,这呢就是我们查询的一个成本。啊,这呢,就是我们整个这个查询的执行的成本呢,预计呢是这么多啊,就是我们涉及到这个成本的一个概念,好下边这块呢,叫table table name呢叫SSE,那其实对应的就是我们这个,呃,原来呢叫table这样的一个字段,然后access type呢,对应的是完原来我们这个tap就是我们对应的一个,呃,算是一个叫访问的一个方法是吧,访问方法啊,这个呢叫。
05:13
Case啊,跟我们这块呢是一样的,然后下边这块呢,你看这个Rose examine sc啊,这个叫9895,实际上对应的是我们这个Rose,然后再下边这个呢,呃,989实际上当于是我们这个呃,Rose呢,乘以这个filter的以后得到的这样结果,下边呢是这个filter的。然后再下边呢,就是我们这个cost in信息有read cost有这个e cost这两个呢,我们等一会儿再说啊,下边这个呢,Cost其实就是这两个值呢,加起来以后的这个结果啊,加了加起来以后的这个结果就这么多,然后下边这个是什么意思呢?比方说我们读取数据,读取的一个数据量啊,就是一兆啊这样的一个大小,然后下边呢,就是我们整个的IC这个表中呢,我们用到的这样的一些字段啊,或者我们想呈现的一字段,咱不是select星吧。对吧,哎,希拉克星啊,我们要呈现的这个字段啊,那关于我们SE表呢,都有,呃,然后再下边呢,就是我们的一个算是一个查询的一个条件了啊,查询的一个条件是我们这个SE里边的这样的一个字段呢,是等于A,然后呢,SE这个KEY1呢,它is not no啊这样的一个情况。
06:16
然后再往下的话呢,就对应的是我们这个叫被驱动的这个表叫S2了啊,然后他使用的这个XS tap啊在这呢也呈现出来了,然后呢,可能使用的这个key是什么。然后对应的这个实际使用的K是谁?然后呢,这个所以呢,对应在我们S2这个表中呢,是K2这样的一个字段,诶然后呢,K Les呢,这个是无是吧?哎,你看相关的这个信息呢,是不是在这也都能对应的上啊OK,然后下边的一呢,对应的就是我们这个一。呃,然后呢,这个跟我们外边这个表呢,相当于它关联的,呃时候呢是985是吧,诶九哎989哎,这是我们在这块呢有吗。在这是吧,989好,然后呢,它内部的这个filter呢,就是100%,然后下边呢,就是我们这个连接的条件啊,是我们这个,嗯,内部的是S2的一个K呢,跟我们外部的这个S1这个K呢,它做一个等于的这个条件呢,去做一个连接啊OK,然后下边的话呢,就是它的一个成本啊,内部的这个成本,然后这个成本的话呢,相当于是我们上边的这个啊1013.75和我们这两个值呢,加在一起得到的这个1360.08,然后在我们这个位置呢。
07:21
诶是不是也有呈现啊,就是这个呈现啊好,这就我们整个呢,相当于说的这个成本的问题,然后这块呢,也是一样,呃,需要呢,读取的一个数据量啊是多少。然后这块呢,你涉及到这个具体的字段啊,我们SR列表中的这个字段是谁啊,就这样的一个情况啊,主要呢,我们关注的就是这里边儿呢,涉及到关于我们这个成本的一个信息,行,那这里边呢,涉及到有个叫read cost和这个ES cost,我们这块呢,再稍微的提一下。所谓的这个叫read cost的话呢,它有两部分构成,第一个呢,就是IO的一个成本,第二部分的话呢,就是我们Rose呢,去乘以一减去filter,然后诶,这么多条记录的一个CPU成本,相当于这个呢,不是我们定位的数据是吧?但是呢,我们还要查出来这个呢,就是CPU的一个成本啊,就这两个叫cost啊,对应过来呢,就是我们提到的是这个信息,对吧?还有这个呢,叫e cost,它呢,呃,是这样计算的,就是直接Rose呢去乘以我们filter这么多条记录的一个成本。
08:15
啊,而下边这个呢,就是我们整个呢,需要花费的啊,加一起,那对于我们这个被驱动表来讲,就是它加这个,然后再加上我们上面驱动表的一个总的一个呃成本啊加一起就可以了,好这呢就是我们说的这个叫杰森啊这样的一种格式的情况啊,大家熟悉一下,然后再往下的话呢,还有这种叫tree这种格式。啊,这种格式它呢主要呢,是根据查询的各个部分之间的一种关系和各部分的一个执行顺序来描述的,啊这里边这个信息量呢,其实就要少很多了,来这块比如我们去做一个展示啊,找到我们一开始这个叫杰森,咱们把它呢改成是个tree。哎啊,一回车啊就可以了啊,这个信息量呢,你看就会少很多啊,这里边呢提到了我们是S1,这个叫common,这个field等于A啊外部这个条件,然后呢部这个K呢,它不是一个no,咱们刚才在上面阶S当中是不是也同样的看到了。
09:10
哎,在我们这个啊这个,哎,这是我们外层这个表吧。哎,对的是吧,哎是不是就我们这个条件啊,哎,然后对应的我们内存列表的条件呢,是在这儿啊。嗯,再拉回来,然后内层的这个表的这个条件啊,这不在这有写。就是它是展示我们整个这个层次这个结构啊,稍微清楚一些,这呢是我们说的这个叫tree的这种格式啊,就是给大家说明一下就行,然后的话呢,第四种呢,叫做可视化输出啊,这种呢,严格上来讲呢,不算是我们plan了,呃,但是呢,由于我们这个myq bench呢,属于官方发布的,所以我们也看成是呃自己这样的一个MYQ体系当中的。啊,那为了就是演示一下我们这个功能的话呢,我还特意的去官网呢,把这个my bench呢,这个工具呢下载下来了,那下载下来以后呢,咱们就直接呢,看一下这个效果就完了。好,首先的话呢,把我们这个工具呢,先这个调取出来。
10:00
啊找一下啊,这个我们是关于MA29他是吧,好找到一下我们这个启动啊。嗯,可以了,然后这个呢启动,呃,我提前呢是已经配置好了,这个大家呢,如果要不清楚的话,你也可以自己装一下,然后点这个加号,这个加号的话呢,这个位置就起个名字啊,我们以前呢,是不是都这样起的啊,192.168.1.150,直接呢能看到我们访问的是哪一台这个远程服务器上的,对吧?呃,这块呢,Host name的就它3006ROOT,然后我们呢,输一个密码ABC啊123,然后OK一下,首先呢做个测试。啊,密码呢,诶写错了吗?ABCD23,哎,保存一下啊OK。啊,这个没有问题啊,来我们再测试一下。ABC啊,这我这个键盘上的这个,嗯,大写呢打开了啊,我把大写呢去掉啊ABC123啊OK一下,行这就没问题了,好OK一下。啊,说已经存在了啊,这个是因为我们起了这个同样的这个名了,是吧,或者起个杠一吧。
11:00
来OK一下。好,然后这块呢,我们就诶启动起来report close啊就不用了,好,那这块呢,呈现出来的是不是就我们对应的这个表的信息了,哎,然后咱们呢,写一个具体的circle啊,首先我们去use一下啊,这呢就是我们这个奔NCH这样的整体的界面啊,Use一下叫艾特硅谷。啊d be1哎,那这时候我们首先呢,选中做一个执行,哎,现在呢,我们使用的就是这样的一个数据库,然后在这个数据库下呢,我们去执行具体的这个语句,对吧。嗯,来过来。那不妨的话,我们就还是以上边儿这个为例啊,把这个这个我们就不选这个杠G了啊,把它呢CTRLC啊粘过来。啊,站到这儿对吧,那站到这以后的话呢,是不是我们这样直接选中就可以去执行了呢?哎,放到这块呢,叫执行啊这个你看我们选中一下啊,这个呢,就给我们呈现这个信息,咱这是用的这个叫吹了,你可以把它呢去掉是吧。啊,这时候我们再去选中的做个执行。诶,这呢跟我们在这个测绘药物当中看到这个效果呢,其实是一样的啊,其实是一样的,那如果说我们想看一下这个整个的这个可视化的界面是用哪个呢?我们这里边有个放大镜啊,点这个就可以了,点这个的话呢,你注意它本身呢,就已经是一个使用explain了,所以这时候呢,我们就不用了,在这个SQL语句当中再加上这个算了,诶如果你要这样去做的话呢,你看我们去点一下这个放大镜,它反而呢,给我们说报了这个说没有任何的一个可读的信息是吧,那你把这个EXS给它去掉。
12:25
啊,就是作为一个普通的一个查询语句,你做一个这个放大镜的操作,那这就出来了。啊,这个呢,就属于一个可视化的一个场景啊,由于我们这个搜Q呢,写的不是算多复杂,所以这个结构的话呢,看着也就比较简洁一些,涉及到了你看有S1是不是S2这样的两个表,对吧?然后呢,我们外层这个呢,看叫for table sc,那我们在刚才这块查看的时候,大家也看到这个type呢,是不是一个O啊,诶我们的访问方案是all,所以呢,这里边相当于是个全表的一个这个查询了,所以它就是红色的,而这个绿色的话呢,表示的就是我们使用这个索引的这个查询了,啊使用对应的叫IDX,你看K2,那对应到我们这的话呢,是不是就是这样的一个,诶在这是吧,哎,这样的一个这个索引。
13:06
好,然后呢,上边这块呢,呈现出来的就是我们这个查询的这个花的这个成本啊,1013.75啊,这个三四六点这个三三,跟我们刚才在这块用这个杰森的方式去查看呢,大体上呢是差不多的。嗯,咱们看的成本呢,是不是一个是他呀,啊这一个成本1013,还有呢,就是我们这个成本,你把这俩加一起300多。啊,哎,那回过来呢,是不是就跟我们这个成本是一样的,然后这块呢,就对应的我们查询出来这个结果的这个条目数啊调目数,然后这个呢,是我们这个的条目数,OK啊,就是通过这种图形化界面的方式啊,一旦呢,我们这个查询语句呢,如果比较复杂的话呢,大家如果想进行一个分析啊,说这个慢查询的哪块其有问题可以考虑呢,使用我们这个a work bench的这个可视化的这样一个界面啊就可以了,行,这个呢我们就说到这儿,然后接着的话呢,我们再来看下这个课件呢,我多了一个叫做show warmings。啊是W呢,就是查看一下这个警告信息。
14:00
这个呢怎么用啊,诶我们在执行这个explain一个操作之后,紧接着呢,咱们去用这个叫wings,这个呢它会给我们呈现出来三个信息啊,第一个level呢叫note啊,这个code呢叫1003啊,103呢是比较常见的,还有一个message,诶这个呢有点意思。啊,大家可能一看说哎呀,这个怎么看着这么乱,其实这个呢,就是他把这个具体的表,这个呃,具体的数据库中那个表的哪个字段啊,就整个完整的帮我们呈现出来了,所以呢,看着这个可读性呢,似乎的差一些是吧,哎,但是呢,我们说这个结构呢,还是比较有意思的。啊,你去细看的话呢,其实。啊怎么着啊,这个呢,就是我们这个执行这个查询液化器呢,它真正执行的时候呢,这样的一个查询语句。啊,当然这个真正执行我也得加个引号啊,就是你可以呢,诶类似于真实执行当中一个查语句,那主要呢,查看它那个目的是什么呢?咱们在前面呢,诶咱们讲哪个内容的时候呢,我是不是提到过一个事儿,就是说呢,咱们这个,呃查询语句的话呢,比如说有可能是一个子查询,对吧,那是一个子查询的情况下的话呢,它有可能是不是帮我们改造成是一个多表的一个连接的方式啊。
15:08
包括呢,我们说用in的这个方式呢,是不是有可能给我们改成这个叫exists是吧,这样的方式,那么呃,相当于呢,进行了一个重写啊,那么我们这个message中大家能够看到呢,那就是重写以后的这样的一个语句。哎,重写一句以后的这个语句,那这个呢,是不是可以呢,有一定的这个可读性是吧?OK,那我们这块呢,就可以给大家呢,做一个演示啊。那比如说的话呢,我们去执行这样的一个啊exl的这个计划啊,我们CTRLC一下这个呢,我们还是知道回到直接呢,回到这个叉L里边,我们去做这个执行啊粘过来之后呢一回。诶看一下,诶这里边的话呢,我们先别说wings啊先这块呢给大家说一下正好呢,你看这还是个例子啊,我们这个S1呢,叫left join s2。啊,那按照我们写的这个顺序来讲呢,是不是应该叫S1呢,去连接S2了,对吧?但是呢,大家你会发现我们结果集当中呢,是不是先写的S2,后写的S1,相当于我们这时候S2呢作为了一个驱动表,S1呢是不是作为这个被驱动表出现的呀。
16:06
啊,那就相当于呢,整个我们这个查询优化器呢,这个它经过了各种执行计划的一个对比发现呢,我们把S2呢作为这个驱动表,整个这个成本呢,要更低一些啊,所以呢,他选择了这样的一种格式啊,这个大家要稍微的注意一下啊,要注意一下。好,那这时候我们看到它这个语句之后呢,我们就可以呢,使用这叫show。哎,Warnings是吧,然后杠G,哎这块呢,我们回车一下。Show warning少一个N。然后回撤一下。好,那这时我们看到了,呃,哎呀这个因为我刚才呢,是不是执行了一个这样一个语句了啊,咱们把刚才这个explain咱们再执行一把,然后呢,我们再去呢,执行show wings,哎这样子好,那这块呢,就是我们一个note,然后1003下边这个message的话呢,就是我们相当于把这个结构呢给它呢,哎,重写以后的这样的一个结构。来重写以后的这个结构啊,大家可以呢去看一下。
17:01
行,你看我们上边这块呢,在写的时候呢,这是不是一个叫left join是不是一个左外连接呀,但是你看呢,给我们重写以后呢,是不是S1呢,去join一下S2,相当于把这个左外连接帮我们那重写成是一个内连接了。啊,重写成一个内连接了,好这是一个,然后呢,咱们去找一下啊,我记得咱们在讲这个ID的时候,是不是说到过一个这个重写的事儿。啊,在这儿呢,你看啊。本身的话呢,我们这儿呢,是一个S1,这是一个S2,那它呢是一个子查询的一个关系啊说呢A这不就应该是一个是一,一个是二吗。对吧啊,一个十一十个二,因为这个我们是一个内查询嘛,啊,但是的话,你发现它这两个都是一,相当于呢,它就把我们这个子查询呢,帮我们给重写成是一个多表的一个连接的方式了,来我们CTRLC一下。回过来,嗯,回到咱们这个位置来,首先呢,我们粘过来啊,执行一下发现呢,你看确实是两个一是吧,确实是两个一,然后接着的话,我们就可以通过这个执行的叫收wings,哎,我们去做一个查看,查看的话呢,你看它是不是帮我们改造成是一个叫多表的一个连接了啊大家你就往下找这呢,其实因为我们上边这块呢,是不是叫。
18:10
呃,Select的星从S1这个表当中,所以呢,前边这个select呢,就是我们S1表中的各个这个字段啊,这个稍微的多一点是吧,PART1PART2PART3这块都找到,呃,然后呢,找这个from,诶from一个表是S2这个表,注意看照一下S1这个表,然后后边呢,就外表条件了,好大家发现了,是不是确实呢,将我们原来的这种子查询的一种关系呢,是不是改造成是一个多表连接的一种方式了。啊,所以说呢,你看这里边儿呢,对应的就是两个这个一。是吧,还两个一的这个情况。好,这呢就可以理解成是我们通过show物war呢去查看一下这个,呃,查询液化器呢,重启以后的这个大体的一个格式,但是你注意啊,这叫大体格式,你可千万别想着说我把这个呢拿过来,是不是在我们这个里边,这里边呢可以直接运行的,那有可能它是不能运行的啊,有可能啊,你需要呢,再重新呃这个调整一下就可以了,行,那么这样的话呢,就是我们关于这个exce它的一个进一步的一个刻画啊,大家呢,熟悉一下就可以了。
我来说两句