00:00
在当前这个表头的时候,我们呢,现在进入到T这一个字段的解析,那么它所反映出来的结果和我们SQL是否优化过,是否是最佳状态息息相关,那么呢,它的值有多个?那么呢,请跟我来看这个type究竟说的是什么一个事儿。那那么呢,他字面意思呢,是叫访问类型,那么呢,他的东东过来了以后,这个type这一个字段,他总共有如下123456788种值,那么呢,现在我们呢,这八种值谁好谁坏呢。那么呢,要求同学们二话不说,先打下扎实的基本功,给我按照下面这段抄写一下,在纸上从最好到最差一字如下,不要先问为什么,先把它记在脑子里面,待会一点点说,先把基本功打扎实了,好比先背会九九乘法表这个基本功,后续咱们才能做四则混合运算,一直到微积分。
01:19
顺序记好了以后呢,它有这么多值,我们按照这个顺序去记,C大于constant大于EQ river大于river大于range大于index大于or,好,那么为什么or是区是最差的呢?也就是说各位亲,我们大家可以看这是不是一个最简单的,啥都没改,只要type出沃企,你的数据量是百万以上的,请一定优化,因为沃是最差,表明你的检索全表扫描。
02:04
当然你说杨哥我的这个记录就十条哦,用不用啊,你不要说什么呢哈,就说不要过度哈,过度优化,不要为了优化而优化,一定是需要才优化,其实最好的程序应该是不优化,OK,当然哈,这个主要是工作中一些事儿,有点悬,但是起码你先给我把最差的是,记住只要是百万级别以上的买色Q没那么傻哈,你那点肌肉什么十小万调的话,哎呀,没这个大事儿,上百万了有误了,注意性能开始下降,全不要扫描,是需要你跟经理DBA协商是否需要建缩引,好后面这些不要管我们,待会说来访问类型排列主要呢,有这么多种,OK,我给,那么这个呢,你就当是没见过,然后呢,我怕你们害怕,我是不是给你们总结了这么多种,这些就是工作中常用,也就是常见的,也就说比如说。
03:04
问你什么index emerger,有,但是几乎你在工作中我都没见过几次,能理解了吗?就有些东西就是就比如说你能够有本事呢,本事的话就是干出来this,说实话这个都不用记明白,待会我会说你就给我把它记着,这就是刚才你们纸上写的那个,没问题吧?第二个给我记着,只要能够达到range和river级别,Range和river级别说诶,杨哥,不对啊,要精益求精啊,你怎么不优化到这个是吧?这东西就好比说北京首都啊,怎么还会有堵车啊,你能跑就不错了,听懂了吧?OK,那么这事我们往下走,来看看分别是些什么意思,来,往下看,第一发是我们的system。
04:00
表只有一行记录啊,等于系统表,这是constant类型的特例,Constant是不是产量的意思啊?平时怎么着,也就是说你查询一张表,每次查了以后这个索引特别快,为什么?因为一单表一行记录,请问这样快不快?假设你你见过一个复杂的系统永远是只有一条记录的呢?那么言下之意什么呢?这种情况下倒确确实实是最优化的了,但是只有一条,那跟业务有毛关系啊?那么所以说这个干嘛忽略不计,你只需要有知道理论知识,这么一个实际系统当中几乎不会出现什么C,怎么可能,而且它是等于什么表,差不多也就是什么什么概念,就是MYSQL自身出厂带的那些表,听懂好重一点来了。Constant是什么意思啊?产量表示通过索引几次啊,用于比较primary key或者unique索引,说白了是不是就主键了?因为只匹配几行,所以很快如何将主键,就可以将主键置于while列表当中,MYSQL就能将该查询转换为一个产量。比如说bank可card number银行卡号,你在这个字段上建了一个索引银行卡号,跟我讲就跟主键一样,是不是唯一的,那么也就是说,注意它主要常出现于主键索引或者是唯一的。那么什么意思呢?
05:32
来,同学们请看现在跟我讲有没有子查询,括号里面是不是有个嵌套的这样一个东西啊,那么好先加载谁,你说这个二和一先是T1呢?还是DE1好,那么这个时候同学们请看,现在感觉有感觉了吧,Derived我们说过这个是不是括号里面的延伸查询啊,然后primary是不是鸡蛋壳最外层的查询好嵌套了以后,大家看我们的话,这个时候我们是不是先加载括号里面的T1啊,然后这个T1是不是就得到了第一,它是个延伸表啊,好的,Table完了以后type请大家看来听我说什么意思呢?我们先说2CONSTANT,请问ID等于一有没有写死,是不是一条ID等于一,这个是不是就像我们Java。
06:33
Private static final定义了一个一样,这个时候是不是查的最准最快,比如说你们班也许只有一个同学叫石强,那么这个时候你们班0629班尤其仅有一个同学就叫石强,名字就叫石强,这个是不是就是一种常量了,好比如说A级就等于77岁等等,那么再来他所以说这个type my SQL分析了以后反映出来主人输给我的是一个鞋死的产量,所以说这个type是constant,性能好不好,快不快,那么再说S什么意思呢?请问这个相当于说F,现在你把这一行一遮,现在于是不是就是第一这张表DE1这张表是不是单表写一行记录啊,那么这个时候是不是更快?那么所以说这个就是S,明白吗?但是反过来讲,我们也知道实际工作中单表单行,那就算你见到诶是挺快,但这个有什么复杂意义,就比如说我的系统只有一个用户注册是吧,京东这么做了,这么大的系统就就给一个人用,让他来撑起双11。
07:33
一好,那么也就说什么快是快,但是这个是不是没有任何技术含量了?好,那么来下面我们来看EQ。看好这唯一性索引扫描,对每个索引键表中只有一条记录,预知索引常用于主键或唯一索引扫描。什么意思呢?就是有没有用到索引,用到了我拿这一堆索引扫描以后干嘛呢?只有一条记录跟我匹配。
08:10
听到好,那么什么概念呢?就比如说现在苹果最高的一个配置,苹果7PLUS以上最高的这个时候我能查的多,我们给他建了索引呢,但是查出来的记录只有一条,好,我们来看案例。来,同学们请看这T1逗号T2,你就把它当做是什么员工表和部门表,现在我T1表的ID等于T2表的ID,两个是不是我们第一天昨天讲的两表关联,请问抬头听好,这极其重要,我们RD是不是研发部,我找了张三、张四、张五、张六四个员工他们的ID,那个department.id就是那边的ID1号,一号代表研发部,李四李五是HR部门的,他们的这个department ID就是那边的二号,听懂,但是突然你会发现,请问这个department ID他作为外键的话,我是不是可以为了加快给他建了索引呢?突然有一个部门用到了这个员工的查询索引,但是部门的查询索引但是。
09:26
他只有一条记录什么意思呢?这个部门ID假设就是什么呢?95什么意思啊?九五至尊一个公司是不是只能有一个CEO,请问CEO是不是一家公司的员工,我应不应该在emp员工表里面,应不应该该CEO?总裁办这个办公室一个部门叫人力资源部,一个部门叫研发部,一个部门叫总裁办,一个部叫财务部,请问总裁办这个部门是不是也是公司里面一个部门,现在是不是这一个部门,尤其已经有一条记录通了吗?能理解这个意思吗?也就是说假设我现在这个t1.id是九五,九五至尊是不是皇帝CEO的意思啊?那么这个时候假设我的这个员工表的department ID是95的话,刚好跟部门那张表也有一个ID叫95关联了,以后是不是说明这个人是总裁办CEO啊?
10:17
听到那么这个时候跟我讲,我见索引的时候,查研发部是一堆可能有200个Java工程师,一个公司说只能有一个CR,但是研发工程师说可能有200个,那么这个时候是不是进行唯一信索引扫描以后,刚好将将好就只有一条记录匹配啊,那么这种情况下呢,干嘛呢?我们来看,首先相同了以后跟我说我们是不是按序加载,先加载从右边的话,咱们是不是先把T2弄过来呀,就是这个时候是不是全部要扫描,那么呢,什么意思呢?抬头你不要怕,全包扫描有时候是避免不了,也是应该为什么大家都知道尺子圆规。
11:00
圆规没问题吧,画圈那个圆规工具是不是要要一腿有一只腿来固定,有一个腿在画圈,固定的那个东西是不是叫驱动表,我要驱动你画圈是不是,那么这个时候就相当于说什么呢?我们从部门这,然后大家看type谱T站的常用的类型,刚好就像我刚才所说的总裁办这个部门就是CEO办公室,尤且仅有一个员工匹配,那么是不是刚刚好就是一条记录匹配呀,OK,那么所以说这块就是什么呀,EQ re发好那么呢,再读读这个话,待会呢,我们来去说后面的你们就明白了,唯一性的索引扫描,对于每个索引键表中只有一条记录与之匹配,刚才我们那个type是不是出现了EQ re法,那么当然,说白了是什么EQ re法有没有用到索引用到了当时呢?查出来只有一条记录,只有一条记录搜出来假假设,诶,把你们公司的陈序员找出来,OK,来了一堆,把你们公司的CEO叫出来,那是不是来一个啊?
12:00
那这个时候就说明什么,记录上匹配用的其实只有一条记录,那么它这个查的快就是EQ听懂,那么再来看下面跟瑞对比着来学。CEO是不是唯一的值啊?非唯一性索引扫描瑞法返回匹配某个单独值的什么函?上一者我们是不是查CEO?下面这货咱们是不是查程序?研发部的程序员研发部的程序员没有听说一个部门就是一个程序员,就是一个研发部吧,你就是部长CTO兼技术总监兼网管兼运维兼测试,它本质上也是一种索引,反问它返回所有匹配某一个单独值的是吗?所有函,然而可能会找到多个符合条件的函都是研发部的这15个兄弟出来,那么跟我讲,是不是就符合条件是研发部的15个程序而出来了,那么所以它应该属于查找和扫描的混合体,什么意思呢?River引用。
13:06
大家请看,我现在针对于T1这张表建了一个索引哈,后面也是按照这样建create index。是不是IDX啊,见了扩一扩二啊,注意索引有这种情况,第一种干嘛呢,全部使用了,第二种部分使用,请问我这个是不是一个符合索引,我希望你是不是按照扩一和扩二两种来查呀,但是有没有可能你只用一半,你单独只用了空机可不可以好大家看我这是不是针对于T1表的,比如说叫内,比如说叫A级名字和年龄,我记了一个索引叫IDX,扩一扩2O吗?往下翻我呢,查重了以后。这个时候对于T那个T1这种,我是不是只有七条啊?好,这个不是重点,重点在这,大家请看selecting from t y框一等于AC,比如说从你们员工表里面给我查出来名字叫王芳的,或者名字就叫AC的行不行?请问这个是不是就是个常量了?好,大家请看一条simple table t,关键看type。
14:26
是不是输入这个值,一个固定的值以后,给我查出员工表里面这个名字叫王芳的,比如说一个银行系统里面重名的叫王芳的是不是肯定很多,那么这个时候我们再来读读我们的这句话干嘛呢?人家说的是什么意思啊?非唯一性,所谓扫描返回匹配某个单独值的所有行。能理解了吗?跟上面的区别就是一个是什么只有一条记录与之匹配,这个肯定快,因为你只有一但是下面才是我们落地的真实,一般到工作中你能到瑞FA你已经是这个了,听懂,因为我们大家都知道谁不想把CQ搞得最好,但是我们都明白是不是理想丰满,现实骨感啊,OK,那么所以说瑞这个级别就说明,再说白点,你们的我们的spring是不是并ID class,然后那些配prepare属性时候,是不是有个那个是代表这个病会引用另外一个病呢,它一样,那么找到什么我们的索引用到了,按照这个索引条件去查询了以后,是不是找出所有符合记录的全部函啊,再来下面看。
15:38
这是什么意思啊?字面意思是不是叫范围啊?注意前者,我们刚才是不是叫T11等于啊,那个是不是要固定的一个值赋值等于啊?范围是什么概念呢?只检索给定范围的函,使用一个索引来选择含T,显示了使用哪个索引列就说白了。同学们抬头,你们一定干过这种事,订单时间,开始时间,结束时间,下单的时间,或者你查询的时候是不是有个between end好,大于是不是范围,小于是不是范围in,是不是范围in,就是括号里面OK,那么也就是说什么概念呢?这种扫描。
16:26
比全表扫描要好,因为你是不是划定一个范围了,做了一些排除和过滤,因为它只需要开始于索引的某一点,结束一点,不用什么扫描全部。那么range了以后什么概念呢?来。ID between30和60,或者A级BETWEEN20~30,那么看我们的DEMO,这个type什么东西啊,OK,往下走,YIDE126,这个tap什么范围,所以说只要是润的用到的也不错,因为你们在工作中是不是肯定会碰上一些大语种查询啊,当然最好是什么?是不是就是等于查询是最爽的呀?好,那么再来index,看好全index skinan in与握的区别为,注意我们刚才是不是最差的,但是反过来讲这个是不是比握稍微好一点点,简单而言就是什么全表扫描是最恐怖的,只要上百万的数据,数据量大,但是基本上你能到个index也不错,因为干嘛是不是可以全索引扫描啊,什么意思呢?
17:44
它只便利了这个索引数,因为我们也说过,部分情况下是不是内存里面就加载这个索引了,通常比握快,因为索引文件通常比数据小,那么呢,它呢,索引index从索引中读取or是从什么硬盘,我从索引里面呢?是不是可以少一些IO啊好,那这个index什么意思呢?我们来来看。
18:08
ID芙蓉T,注意前面我写的是select新,我这是不是只写了个ID啊?请问ID是不是主键索引?每张表都要有个主见吧?好,那么这个时候大家请看,我要从T表上获得ID的信息,刚好ID又在索引上,那么请问可不可以了?明白,好,那么所以说这个时候我们呢,也就是说type出现了,Index也是可以接受的,说明它是全索引扫描,而不是什么全表扫描,当然这个后面会和大家讲讲这个索引覆盖,或者叫覆盖索引,那么回头的话我们会有详说,不用着急,那么再来table scch将全表扫一遍啊,那么不用讲。
19:00
那么呢,我们这如果type等于握在这块,是不是刚才也之前也见过呀,那么言下之意,这张邮件里面贴好红色的圈圈一化经理,这条SQL我跑了一下ex分析在系统上可能会有误,全表扫描的情况,我们应建议呢尝试一下优化,那么呢,我把这条SQL改了改,我优化以后是这么写,这个效果已经从我变成了润或者是别的,那么这个时候是不是你工作技巧的体现了,OK,那么呢,所以说在这我们呢,就熟练的介绍了什么type,总共常见的就是一值,OK,好,那么呢,更深入的系统呢和学习呢,我们今后下午后续的再展开,早上进行到这,大家呢,可以休息了,好。
我来说两句