00:00
OK,前面我们是不是详细的说了explain了,好,那么下面呢,我们呢来看看如何进行索引的建立和优化,好,一定要先学会这个explain,会看哈,我们来现在就像如同说什么这份体检报告化验单打出来了以后,咱们是不是才能去调啊?好,来我们呢进入到下一个章节,索引优化的案例分享来索引分析首先一表两表三表一点点加上去,咱们呢先来看单表,那么呢,这条social绣呢,就比如说是一个门户网站发布了一篇文章,好吧,那么呢,主见作者ID分类ID被查看的次数,然后这个是回帖。
01:00
的备注,这个是发布新闻这篇文章的标准主题,Content是文章的正文,正文内容O吧,好,现在我们呢直接呢也说过,我们现在高级部分是不是主要学的是优化和调优,而不但是讲解s select这些东西,听懂了吧?那么这一块呢,我们直接过来把素材准备好,那么下面我们一张贴,那么呢建表,查数据,做查询,那么我们可以看到主件有三条记录,听懂了吧,那么呢,根据这一堆堆好那么接下来的事儿我们呢就来看看,根据我们的案例假设我们呢产品经理给我们提了诉求,我们呢去写这条SQL如何保证?因为现在我在教学环境里面,我的这个article,新闻这张表,文章这张表是不是只有三条记录啊,但大家都知道腾讯微博,今日头条这些客户端,你比如说三条了,恐怕3000万条。
02:00
这边全球各地的都多的是吧?都可以编的出来吧?好,那么这儿我们呢,往下走,现在我们要求写的是查询什么呢?Category ID为一的,且comments大于一的,这种情况下被看过的最多的文章ID,言下之意什么?既然是最多,是不是top扑one应该有几条正确?最多嘛,就你们班个子最高那一个。年纪最大的那个对吧,或者说是什么呢?年龄最大的这些,那最是不是only没问题吧,那么这个时候大家请看我们的SQ。将其写出来。那么呢,干嘛呢?首先。来从文章表找开格,ID等于一,并且内容大于一,然后呢,按照视图会查看的最多的一条是不是立米特one啊好,那么来同学们请看我一查,我们这个时候我们呢,可以或者这样吧。
03:20
首先各位亲,能不能查出结果,那么我们就说强调过,现在的操作是不是军事结果都能查出来,对错的问题是不是已经解决了,但是现在是不是要解决中间优化的问题啊,我们来看看过程,这个时候如果我们这条结果虽然说是正确的,那么呢分析一下。当然你可能会说没事,杨哥你输了三条,大家可以看到,根据我们的说法,SQL是不是能查出来呀,活干完了,功能你已经搞定,可以上线,也就是我们说过的先完成后完美,先功能再性能,现在是不是要拔高了,以后你得注重性能啊,那么来往下翻,首先三条嘛,这个沃还可以,但是我们必须为未来预留空间。
04:24
这个时候他一定会增大,那么这个时候圈不扫描好不好啊,另外一个更多了以后,又产生了一排序,是不是很悲剧啊,好不啦,那么呢,目前我们理论和实际都没有索引,为什么?因为我们没见嘛,是不是那么呢?Show index from article。哎呀,怎么又折寒了?能能看清吗,同学们。一瓶还装不下是吧,好。
05:04
我在试试这样行不行。还是有一点是吧,放大了,哎,就先这样吧,行不行,同学们啊,就凑合一下哈,好,下面我们呢,知道了这个以后,我们可以看到当前新闻这张表,文章这张表上面只有一个主见和别的索引,没有吧,那么呢,为了改善我们的情况,我们呢只好。Type鼠全表扫描,这个还出现了文件内排序,也是最坏必须优化的,那么呢,来开U2种方法,键索引的默认,也就是说现在我们这是什么尝试着键,我们也不知道我们这个索引建的对不对,好不好,我们是不是只能慢慢的调整啊,那故意的按照条件来说查询扩ID com view,貌似我是不是用到了这三个字段,换句话说,这三个根据前面我们刚才所讲的是不是while后面跟着的字段,我们前面让大家导过的笔记,是不是哪些字段建索引where条件后面需要被查询到的,是不是要见啊?那么这个时候呢,我们这么干两种方法都可以,一种是out table版的,一种呢,就是什么create index版的,OK,那么呢,我们用下面这个。
06:27
来这个时候,由于呢,如果我把这三个单词写全这个,所以名字是不是太长了,我就取首字母简写CV吗?好,那么这个时候我们呢,可以看到现在我是不是在article这张。表上面这三个字段建立一个CCV的符合索引啊,OK,这个时候再来,同学们请看,之前我是不是只有这一个,但是现在是不是一楼二楼三楼都把三个索引,这三个字段构成了同一个符合索引,给我排好序,一楼二楼三楼的了,他的意思就是在检索的时候,我是不是先找他,然后再找他,再找他呀,好嘞,那么下面我们呢,估摸着来看了以后是不是又来试试啊?
07:21
好,这个时候来,同学们,我们呢,一回车。分析,首先同学们,我这所以有没有被用到,何以见的,正确理论上你应该用到你刚刚见的,实际上咱是不是用到了,嗯,然后呢。这个时候type的时候大家看大于一,请问是不是范围正确吧,那么比起前者我们也可以看到干嘛,前面咱们是不是根本就没有啊,那么这个时候我们来看,但是你全表扫描,你倒是给我摆平了,但是这个呢,这个是不是还留存着呀,那么呢,这个是为什么呢?同学们请看第一个我们假设哈,我们现在把这个东西调整一下。
08:29
这一问。等于一,好,同学们,这个索引是不是没动过呀?来,同学们请看这个type是不是一下子从范围变成了瑞法,而且人家爽死你了,是不是给你两个产量啊,还有没有fair塔,那么这种情况是不是最好的,但是能不能这么做啊,这变成是老师这个题目我做不出来,你这个题目出的有问题是吧?我改改题目对不对?从这我们想给大家说的是这样一个情况,什么概念呢?由于哈你建的是CCV,那么正常来说可以用上。
09:14
因为都是等的时候,是不是CCV3个字段都有啊,但是不好意思啊,我们这先注意一个条件,就是大于的时候,它是一种范围,范围的时候你看到这儿是范围,到这儿是产量,谁更精确,也就是说在这块的时候,你要记着范围以后的索引会导致什么时效,也就是说抬头。CCV,现在不好意思啊,这个后面的你给我断了,那么这个5U是不是不好找啊,所以说就导致什么,我用不上主人你给我修好的一楼二楼三楼,我到那儿了以后,到第二个干嘛,是个范围,就本来说你要去找一个房间,我跟你说你你找101201301顺序上去能不能找到,因为1012013013楼的房间是不是军事产量啊,但是101有了,201有了,跟你说三楼怎么找,找吧,反正都是三楼有100个房间,你是不是只能一个一个的按照,但是你唯一能收到的消息是大于一,就假设不是301房间,从301房间后面自己去找,那么跟我讲这个排序了以后,MYSQL他做不到,他是不是自己又内部产生了文件内排序啊,后面我们会详细的讲索引失效以及order by。
10:43
相关的索引问题,在这儿你就先混个眼熟听懂,那么这个要到第三天了以后你们才能全明白,目前是打个铺垫,那么从这我们就会发现,当你是大局的时候,诶,这个索引后面的是不是用不上了,但是跟我讲两个K都没有声呢,说明这个索引和这个索引大家看是不是都用上了,但是同样的一个索引,SQL条件一不一样,它查查询出来的结果和中间的性能部分是不是完全不同,好所以说呢,在这儿我们干嘛能不能改这个题目啊,因为产品经理提供给你的需求是不是大于一啊,反过来讲,如果以后你跟产品经理提需求是尽量提等于啊。
11:27
明白,确定听懂了吧,再来,你们是不是一定做过这种事?前面是一张父母表单,重要的关键字段是不是要打一个红色的星星,此处必填啊。那么这个时候干嘛呢?言下之意,那些字段如果从底层往前推,你会发现经理,产品经理跟你吵架是什么概念呢?产品经理只是图好看,他只关心表现起,他根本不关心这些字段哪些重要,哪些不重要,他觉得哎呀,这个这个这个都是必天下,甚至说难听啊,这是不是恨不得你每一个字动是必天下啊,嗯,然后呢,你自己要有个心眼,OK,产品经理做的产品原型这些字段对我们Java程序而言,是不是就是table,那么大家可以看到。
12:13
你建好的索引这个库拉,它给你的字段有没有是大于范围还是等于产量,这个对你系统的CQL写的难易程度和查的是否快,是不是很有影响啊?那么你自己跟产品经理碰需求的时候,那么你就要反过来引导并建议产品经理这个字段不能为空,否则我们的程序会慢,不是我做不出这样的话,是不是一种从技术角度合理的建议啊?嗯,回头我们会看到,尤其是什么几句心法口诀,这个索引的话,你们全部都会背下来,基本上以后你就拿着这个套路去做,我敢保证你的SQ一般不会索引失效。好,那么现在导致我们呢,这个索引见了以后,我解决了全表扫描的问题,因为原题目的产品需求要求是不是就要大于一啊,那反过来讲,我是不是还得解决这个问题啊,那么怎么办呢?索引的建立不是一朝一夕,说明当前我建的这个。
13:13
所以平铺直叙,结合目前的诉求,是不是不是最合适啊,因为中间大于一有一个范围,导致后面的什么,所以用不上听懂,那么来下面我们干嘛?是不是只好把当前不太合适的这个索引,注意当前这个索引是不是至少给我解决了全表扫描这个问题啊,把它删掉,咱们是不是重新来呀,OK,那么呢,我们呢,Drop index on table,下面我们是不是把不合适的这个将其删除啊,OK。删掉,那么再来大家看是不是又出现or和using fair so,说明我们的此路不通,CCV是不是不好使啊?那么我们能不能干成这个呢?由于中间啊,当然这个是大等于一是不是啊,那么你看我们大于一的那个呢?大家看是不是都一样啊?好,我们现在说大于一的这个哈,原题目是这个,那么这个时候我们在想不能建CCB,由于中间的这个是大于,咱们能不能绕开它只见一个CV呢?我们呢,大胆假设,小心求证,来试试看最终我们的目的是不是既不要出现word,全部要扫描,也不要出现fair文件内排序就是好。
14:44
对吧,那么OK,我们呢,往下走,现在我们可以看到上一波的原理哈,我们上一波我们哎呀刚刚删掉了。上一波我们是不是变成了这个润减,好,那么请看。
15:04
但是这个里面出现了,它无法接受,我们已经建了索引,为什么没用呢?因为按照B数的工作原理,我们按照CCV的排序,是不是先找了第一个,第一个兄弟你刚好给我的是一个什么产量,能不能用上?OK,那么这个时候往下走,那么呢,我们先排序它,如果遇到相同的,这个是不是在排序它,如果又遇到相同的,这个是不是在排序它是不是刚好就是一楼二楼三楼CCV的顺序啊,那么呢,Command的字段在联合作用中处于中间位置啊,又由于它是大于一条件范围值是一个积,那么跟我讲,弟兄们,这是不是个range范围以后的不好使,因为MYSQL无法利用,所以在对后面的无U部分进行检索,即range类型的查询字段范围版的后面的索引失效。听懂好,那么这个时候我们呢,删光了以后再来见索引,此时我们见的索引就是什么呢?CV啥意思呢?来大家请看这个时候是不是一楼二楼是个范围不好使,咱们是不是直接是把三楼降下来变成一楼二楼啊好往下走,那么这个时候我们呢,可以看一下这个时候是不是一楼是这个,二楼是这个呀,那么OK,我们呢,往下翻。
16:32
题目还是它explain以后,大家可以看到是不是既出现了法也理论实践相统一,用到索引又没有内排序,且还挂了一个产量啊?OK,那么这个时候是不是还完成了我们的检索加排序,同时都用到了我们的索引啊?OK,那么呢,这个呢就是我们的索引,我们可以看到type变成了瑞法额外中的using file也消失了,结果是不是OK了?好的,那么这个呢,就是我们的是吗?索引优化案例的第一个最简单的单表分析。
我来说两句