00:01
好,那么呢,来同学们,我们呢,现在呢,来看一下哈。我们呢,进入到我们的第三章查询截取分析,那么这个时候我们将要学习哪些内容呢?主要是查询优化。慢查询日志批量数据脚本so profile和全局日志查询,那么呢,一般而言,在面试的过程当中,他一定会问你,你对色求的优化有哪些都懂,我们是不是说过了四试啊,那么第一式同学们是不是跟杨哥学到手了,没问题吧,好,但是这是学的第一式,其实而言用的过程不是这样,我们呢,或者是这样学习先学的啊,我们进行分析呢,差不多呢,有些这么一样的一些问题,第一个干嘛观察?
01:00
就是至少跑一天看看生产的慢CQ情况,那么呢,正儿八经觉得确实很慢了,在慢的过程当中,我们要第一步开启慢查询日志。设置确值,比如超过五秒钟的就是慢,然后干嘛呢。并将他抓取出来。第三步。我们干什么呢,才会到我们这的explain加我们的什么慢分析,这个时候基本上到这儿应该能出来八成了,也就80%的CQ,你会发现哦,原来是我们这个色Q写的不好,重新调整,那么你如果到这一步还是没有摆平呢,需要进一步更加深入细致的分析,那么就是收什么profile,那么这个时候可能同学老师这是什么鬼,可以这么讲,它的分析力度恐怕比explain是吧,不成多让有过之而无及,那么这个时候我们会用收profile,差不多到这几乎99%的应该是拿下,那么最。
02:52
最后第四步呢,干嘛呢?轮不到我们做什么,一般而言是运维经理或DBA进行SQL数据库服务器的参数调优。
03:16
一点,所以说我们把上面一个总结就是查询并捕获。2EXPLAIN慢查询分析,3L查询SQL在数据库MYSQL服务器里面的执行细节和生命周期情况。第四,那么就是S数据库服务器参数的调优。
04:03
这四步就是我们的大纲,没问题吧,同学们好,那么呢,我们呢,往下走一点,先在这块的时候,为了保证我们的三和数据可以玩,后面的咱们这儿看是不是还有一个查询优化呀,抬头咱们从开工写到这儿,我们是不是写了select到while了。言下之意就是目前我们学到了什么5万就是说难听点就是什么同学们前五个月的CQ初级入门,是不是学了select之后,While之前啊,现在到我这到优化,为了保证大家,所以OK的话,我们是不是学了WHY之后啊,但是别忘了还有一个东西在等着我们,这个东西是不是就是water和group by呀,也就是说从开学讲,从开课讲到这儿,咱们是不是只学了while之后,Order之前的呀,那么呢,前面的案例分析是不是专门有order的各种情况,这就是我们的什么查询优化里面的更深入一步,是不是就是我们的什么呀,排序优化呀,好,那么这我们呢,简单的呢,来看一下第一个。
05:33
在查询或者叫这种关键字的优化的时候,请大家看一个知识叫什么呢?永远小表驱动大表,那么在这块请同学们呢,注意这面这个东东。什么概念呢?就是说假设同学们是不是都写过负循环啊,那么假设特尔I等于五这些我就不写了,没问题吧,好。
06:08
好,同学们,这个有没有问题?执行多少次循环,请问结果是不是一样?都是,就像我们说五乘1000和1000乘五是不是一样的?数学上是这样,但是对于买色Q而言,或者是数据库而言不是这样,为啥?我们尽量的选择什么上,为什么呢?小表驱动大表,简单而言,就一句话,数据库最伤神的是不是跟你进行连接和示范啊,那么这个时候你只跟我建立了五次连接,第二种情况,你跟我建立了多少次啊,1000次,那么再把这个数量集大一点,上百万次呢?假设你跟我连接了。
07:14
两次,每次做上百万数据集的查询,查完你就走,你这个connection是不是就是两次,反过来我今天要跟你连接100万次,申请连接释放,申请连接释放,申请连接释放,这样重复100万次以后跟我讲系统受不受得了,那么这个时候,所以说我们这儿有一个非常重要的概念,就是什么小表驱动大表,那么这个时候又诞生了in和exist相关的说明,好,这个时候请大家看一下哈,那么呢,结合我们刚才所说的这些内容呢,以后我们在这儿是不是尽量用这种方式啊,那么同学们一定学过一种S,就是什么呢?就是in和exist,一个exists是exists的话,是不是in的一种缩写啊,一种替代,那么呢,不见得。
08:14
用一个exist就一定优于in,什么意思呢?同学们一定写过这种色员工和部门哈。假设来看一下这。小表驱动大表小的数据集驱动大的数据集,好,同学们,这个RB是基于规则哈,Ruler的意思,Select新from,假设A表示员工表where,什么你的部门ID1SELECT部门ID部门表可不可以?那假设我这个部门是什么呢?只有三个销售部,总裁办,市场部,那么言下之意是不是在这三个部门里面的记录全部弄出来啊?那么这个时候请同学们注意这个负循环这样的东东哈,小表小的驱动大的,什么概念呢?如果你现在先这样写,Select ID from b相当于。
09:19
外面的第一个负循环是不是select ID蓉B同学们大家都知道,比如说华为有100个部门,我随便乱说哈,但是华为的整个员工,全球的员工少说有个15万到20万吧,那么我们在想,如果现select ID from b,是不是先要用小的部门表,员工是不是总比部门多呀?那么这个时候我们呢,相当于说负循环select ID b,这个时候首先就得到了第一个小表,再来第二个循环,是不是相当于说a while a.ID这个in是不是等于小表里面的呀?那么是不是我们从员工表里面获得部门号对应的ID呀?好,那么这个exist又是什么东西呢?它的语法又是怎么写呢?第一个我们来看善者倒是。
10:19
也是一个面试题哈,就是用谈谈你对硬核一的意思的理解,那么同学们呢,这边基础知识呢,晚上可以随便找张表练一下,我们主要是说小表去用大表讲性能,这边基础知识五个月前都说过,当B前面的原则是什么?当B表的数据集必须小于A表数据的时候,咱们用in是不是优于exists啊,反过来我要让你把这个in这种方式改成exist啊,应怎么改呢?那么呢,很简单,只不过把ID这个给它抹掉,换成exist,但是什么时候换呢?有讲究来。
11:01
大家请看。之前是不是a well ID in啊,现在是变成ID in没了,是不是变成一个一个list,换句话说是什么select,这写了一个一,那么注意我不写一行不行,行,你写一个什么单引号,写个大写的字母X或者abcd都行,或者写个五干嘛,只要这是个常量就行,它它的意思什么呢?B,大家看是不是把以前写在外面的拿到了里面呢?好Y啊b.ID等于a.ID那么跟我讲,你要像这样写了以后相当于等价什么呢?先从什么A做外面的循环,再从B做外面的里面的循环,那么这个时候一个Z就会变成什么,看看这个A表是否存在于这样的一个里面,它返回一个true和false的一个布尔值,那么简单来说就是要当A表的数据集小于B表数据之后,用谁用于谁了,OK,那么呢,这个exist上如果同学们在五个月前写的少的话,没关系,只需要记得下面的公式,现在大家我我应该正常来说,初学者的话,是不是用应觉用的理所当然啊,但是呢,有时候exist在性能方面,尤其是小表用大表的时候,只要两者数据集不一样,用它会优于印,那么这个时候大家请看。
12:47
公式就是select这个she from某张表while exist exist里面是个什么?Some qua,什么东西啊,子查询,大家看这个是不是一个子查询啊,那么好,他干的事干嘛呢?
13:05
将主查询的数据放到子查询中做验证,前者用in的时候是不是两步,第一步先得到B的ID,然后再给我找员工表里面部门ID在B里面的这个结果值啊,现在就变成什么呢?两者相等的,然后你再问我是否存在,那么呢,相当于说将主查询的数据放到子查询中做条件验证,根据验证结果处和first来决定主查询的数据保是否保留,或者不要,那么言下之意,咱们两个相等的,如果在外面再套上。是吧,条件的话是,比如说A减大于26的,那么这个时候是不是就可以获得呀,它的意思是什么呢?A和B相等的,跟我讲是不是就像取了一个交集,得到这个以后,问问说有没有存在于这个交集里面的,有就拿出来,没有就拉到,有了以后,假设后面再加个Y啊,我要求这个交集里面有100条合适的两者相交的记录,我要求什么?只要其中的20个,那么假设我们再说一个A减大于28岁的,那么这个时候是不是把这100个里面再挑出符合条件拿出来啊,那么这儿所以说。
14:22
Exist子查询呢,它只返回什么true和false,要注意这个里面的子查询是不是实实在在的返回数据啊,它这个里面是只返回处和false,如果返回false没有是不是不保留就算了,那么所以说子查询中的子弹的心可以是一或者是其他,或者说所以说这个其他的意思是可以是什么select杠叉这么写都可以能理解吗?看到他的官方的说法呢,是会执行的select清单,因此的话干嘛也就是说这块他会忽略,那么呢,我们写一或者是大叉是不是都无所谓啊,第二个那么呢,这块是他官网上的一些说明和一些特例,我们呢,干嘛呢,知道一点就可以,重要的是后面这个到底何种最优,是不是需要具体问题来分析啊,那么目前以我们的原则就是小表驱动大表。如果说B表的速。
15:23
据集小于A表的时候,我们用in,如果A表的数据集小于B表的时候,我们用exist OK,好,那么这个呢,就是我们的第一步,用小表去弄大表,好,那么同学们,我们第一节课就先到这儿,大家休息一下。
我来说两句