00:00
好,同学们,咱们接着往下讲啊,下边呢,我们来引入一个新的概念啊,叫做覆盖索引,咱们在前边呢,讲这1PLAN的时候呢,其实呢,稍微提到过一下这个覆盖索因,只不过呢,我们没有呢,呃,具体呢,展开呢,给大家去讲解啊,包括的话呢,咱们在演示这个的时候啊,咱们讲这个albi的时候呢,咱们往上翻一下。的时候呢,我们说到这个过程二的时候呢,大家你看我们这个位置,诶当时呢,你看我写的是不是这样的一个对吧?嗯,前提呢,是这样子的,我们在这个student表里边呢,有这样的一个索引a class ID和这个name啊这个咱们也不确定这里边有没有,咱们跑一下执行。啊说已经有了,行,那就有了,有了以后的话呢,大家你看当时的话呢,我们去执行这个plan的时候,啊,执行这个plan的时候呢,大家你会发现呢,我们实际上呢,是不是没有使用上这个索引,对吧。好,没有使用索引,这是个哦,那么我们把这个呢,打开了,我打开以后呢,大家你可以对比一下,跟我们上边这语句的主要区别呢,就在于我们没有查询这个表中的所有的字段,而是呢,只查询了这个age和class ID,而这个age和class ID呢,是不是正好呢,跟我们这个索引当中的age class ID呢,能够匹配的上,对吧?那么在这种情况下,诶,大家你注意看啊,我们做一个执行,那此时的话呢,大家你就会发现呢,你看我们这个时候呢,是不是使用上这个索引了。
01:17
对吧,使用上这个索引了,诶那大家呢,可能会觉得有点奇怪啊,包括的话呢,你看我们这时候把这个name呢,字段我也能给补充上,那我选中呢,再去做一个执行,大家发现呢,是不是仍然使用上我们这个缩引了啊,那我们再补一个字段,咱们这个在student这个表当中,我们这个主键是谁呀。咱们这个主件的话呢,是不是这个ID啊,好,我把这个ID呢,咱们也补充上,好这个我们再回过来。嗯,这个往上再翻一翻。嗯,在这,诶在这儿是吧,我把这ID呢也补充上了,然后呢,咱们再选中呢,做一个执行,但你会发现呢,诶仍然使用上了,哎仍然使用上了,那我们再加一个,咱们是不是还有一个呢,叫做student这个number,是不是还有这样一个字段了,我再多一个字段啊这个时候呢,我们说它就不乐观了,来我们再走起,当然你会发现呢,你看这时候呢,是不是就用不上我们这个索引了,哎大家呢,就会觉得有点蹊跷,诶怎么说呃,这个一会儿能用上,一会儿又不能用上了,这块加速段的话呢,有什么讲究吗?
02:12
这个呢,其实就是我们现在要给大家说的这个覆盖索引,那我们刚才呢,能够使用索引的情况呢,就是由于呢,他判断以后呢,发现呢,我们用上这个索引的话呢,诶这个肯定是成本会更低了,对吧,那我们这时候呢,使用这种索引的场景呢,我们给它起个名就叫做这个覆盖索引。好,那么首先的话呢,我们给大家呢,去解释一下什么叫覆盖缩引对吧?啊,那下边呢,我也写了两种理解方式啊,咱就不看这个了,呃,咱们呢,从这个角度上去说,大家呢,回忆一下咱们讲这个第六章的时候呢,咱们是不是说的这叫B加数对吧。这个必加数的时候呢,咱们先是呃,有一个迭代的过程啊,自己构建了一个从简易到复杂这样一个过程的这个必加数,最后呢,我们还引出了叫居促索引和二级索引的概念,咱们以这个二级索引为例,那后边呢,我们对这个B加数呢,又进行了丰富,那最后呢,咱们就相当于是通过这块呢,我们是说明一下这个二级索引,好,大家看这个。
03:05
不知道大家还记不记得当中我们这个设计的方案啊,我们在这个表当中呢,实际上是有这个C1C2C3。这个三个字段对吧,然后C1这个字段呢,是主键,咱们现在针对这个C2字段呢,我们建立了一个普通的二级索引,好那么大家来看这个呢,针对这个C2字段呢,我们建这个二级索引的话呢,在这个非叶子节点上呢,那我们这时候呢,看到这个颜色的实际上呢,都是我们这个C2这个字段了,然后这儿呢,就我们这个C1这个字段,然后这儿呢,是你对应的这个页码对吧,页号啊往下走。OK,是这样子的,然后的话呢,呃,这是非叶子节点,这个呢,是不是叶子节点,然后叶子节点当中我们说呢,它会保留你本身的这个索引的这个字段。以及的话呢,就是我们对应的这个主键的这个字段值,那方便呢,我们是不是诶进行回表操作呀,对吧?好,那比如说呢,我们现在呢,写了这样的一个语句啊,我叫做select星,然后呢,From from我们这个表对吧?哎,From这表,然后呢,Where呢,我写的这个叫CR,等于具体的比如就叫一吧。
04:05
啊,或者写个二也行是吧,这个无所谓了,那这时候呢,我们是不是就要使用这个CR的这样的一个二级索引的这样一个B加数了,然后往下去判断,判断完以后的话呢,我们通过这个,比如说举个例子啊,比如说这个值呢,就是二了,我们通过这二的话呢,是不是找到具体这个C1的这个值,然后再去回表操作,是不是查询一下我们这个,呃,C1假设就是三的话呢,是不是看C1是三的时候呢,我们那个表中最后的索引中的最后那个叶子节点,把我们这个C1 C2C3这个字段呢,是不是都取出来,然后呢,查询出来。对吧,这个大家过程应该很熟悉了,好那么大家注意,如果我这个时候呢,我写的不是这个星,我写的是什么呀,我查询一下这个C1和C2。我没有去查询C3这个字段,那么这时候呢,大家你想我们如果说不使用这个回表操作,你看行不行啊,为什么呀?诶你看我们这时候的话呢,咱们where这个条件当中,这个我们出现的是你当前这个C2这个诶索引当中必须要有的这样一个字段,同时的话呢,我们这个二级索引当中是不是一定还有这个主键的这个字段啊,相当于呢,我们这个二级索引的这个叶子键中就已经有了这个C2和C1了。
05:08
那你要查的呢,也是C2C1,我也没有想着去查那个C3,那其实我们就完全没有必要呢再去回表了,那么这个时候的话呢,我们就把这种情况呢,称为是一个覆盖索引,也就是说呢,我们查询的这个呃二级索引,然后呢,呃,这个索引我们使用这当然咱们这是个单列索引啊,你要你有可能是一个多列索引嘛,诶多列的这个联合索引对吧,那联合索引的话呢,我们这个位置呢,你可能出现这个字段就会比较多了,诶我们用上的那个索引呢,你这个索引的这几个假设呢,索引是由三个字段构成的,诶我们要查的时候呢,恰好这三个字段。啊,这都都在这里边儿呢啊,顶多的话呢,我们说还可以再多一个什么呀,就这个主键的这个字段啊,这四个字段的话呢,只要你出现在这儿啊,别比这个多就行,那你要是这四个里边呢,这个少一点可以,那我们都是可以呢,不用回表操作啊,那我们把这种情况呢,就称为诶叫做这个覆盖索引。
06:01
诶,就是我们说的这样的一个概念,OK啊,这个你看这里边说这个非呃或者看这吧,一个索引包含了满足查询结果的数据,就叫做这个覆盖索引。啊,然后呢,这个它包含,哎,它包括在查询里边这个select John和where中啊,用到的这个所有列啊等等啊,相当于索引,那索引这个列加上这个主键,它包含在我们这个select from中。啊,就是你可以更少,但是你别多了啊,像我们刚才呢,给大家在这个举例的时候呢,呃,咱们这里边呢,是不是造了一个这样叫呃,Age class ID和name是吧,再加上我们本身这个ID是不是一共是四个字段,那我们呢,诶要是用这个索引的话呢,其实你最多这个位置呢,是不是就写这四个字段啊,这个字段之间呢,其实到没有这个顺序的要求啊,这个都还好,那但是你别多于这词个,你要少少几个的话呢,这是可以的,仍然呢叫覆盖缩引,但是你要一旦多了,像我们刚才写了一个叫student number,多的话呢,我们就没有办法了,必须要回表是吧,那就那不用这个覆盖索引了,那相当于我们刚才加了一个student的时候呢,那因为呢,你又已经不是个覆盖索引了,然后这个差异化器呢,经过经过这个成本判断发现呢,说我没有必要用这个索引了,直接反正你要回报操作啊,那干脆呢,我直接呢,就针对我们这个完整的这个表,我进行一个排序操作得了,成本呢更低啊,就成了这样的一个选择了。
07:19
诶,就是这样的一个逻辑,行,想必呢,大家已经听明白了,然后接下来的话呢,我们再去举这个例子呢,给大家做一个说明,好这块呢,我们往下去写。嗯,前边的话呢,咱们写的这个呢,叫无排序优化是吧,后边呢,关于这个go啊等等的这个咱们就没写代码了啊,所以我这呢就写成个六啊这个叫哎覆盖索引OK啊行,这块呢,我们把这个代码呢粘过来,首先的话呢,这块呢针对student里边呢,诶怕我们之间有其他的一个索引啊,咱们这块呢,就把这个呢执行一下啊删除啊行删掉了,删掉以后的话呢,我们再创建一个新的啊叫做age和name这样的一个索引,好,我们走起。啊,已经创建了是吧,哎,创建我就留着就行啊说接下来的话呢,你看我们这样去写的啊,说select from student where age不等于20啊咱们在前面呢,讲这个索引失效的时候呢,是不是提到过说这个A不等于的时候呢,就不能够去使用索引了。
08:09
这个大家呢,可能还记得说老师你这样整的话,肯定用不上索引,呃这个目前呢,这个还确实用不上啊,但是一会儿呢,咱们一改变的话呢,就能用上了,所以说呢,诶根据咱们前面讲的这个关系啊,大家不要去死记硬背,就是整个呢,还都是基于我们查询优化器呢,从成本的去考虑,就跟说这个,呃资本一样啊,资本家是吧,资本家都是什么呀,逐利的,所以你不要呢指望着他,呃这个出于人道主义啊,或者他去给你讲理性啊,都没有用是吧?诶就是出于这个盈利逐利的啊,他觉得哪挣钱他就在哪,你比如说华尔街的这个资本家。诶,他已经完全不一定归属于美国了啊,你比如说中国现在呢,发展特别好,那现在这个资本的话呢,这个热钱就涌向中国啊,美国发展好呢,他就涌向美国,他没有说呢,诶我是爱国的,我爱美国是吧,我我我就要这个跟中国去敌对啊,资本家就是逐利的,这才是他最根本的目的是吧,就跟我们说这个查液化器一样,诶他是就是追逐这个成本的,所以呢,我们这里边写这个规则啊,呃,也是通过这个规则呢,我们去判别一下茶园液化器呢,它大概要怎么去做,但是这个规则的话,都是时刻可以打破的。
09:16
啊,就像说那个经济是吧,讲了很多经济学的规律,但是你最后发现呢,呃,实际的这个市场当中,很多时候都是违背我们的规律的。啊,因为人性是复杂的。经济的规律的建立了一个大前提啊,不知道大家呢,有没有经济学的一个大前提呢,就是人呢是理性的。是吧,哎,人是理性的啊,建立在人的理性的基础之上呢,我们有了各种各样的经济学的模型,但是事实上呢,大家你知道人是绝对的非理性的啊,有太多这样的例子了啊,是非理性的啊,举一个简单的例子呢,呃,是不是讲那个叫乌合之众啊,这个这个当然这个呢,其实也很早的就已经写到我们经济学的这个理论当中了啊,你比如说的话呢,现在呃,路上有个人假设呢,有个人就指使你说啊,你把那个人打一顿。啊,你敢去打那个人吗?啊,我觉得你八成不敢去打是吧,但是呢,如果现在我们有一群人啊,上百号人,然后呢,其中有个人说我们把他打了是吧?哎,可能这些人轰一下子就全上去了啊在这个群体当中人呢,哎,往往就表现为这种非理性的特征啊,因为你觉得呢,这个人如果被打伤了,或者打的更严重点,你觉得你不需要负责任。
10:17
啊,因为大家反正都打了嘛。哎,你会这样去想,但是单独一个人的时候呢,你可能就不会这样去想啊,你可能还会胆怯一些是吧,所以人人性的是非常复杂的啊。好,那拉回到我们这儿的话呢,就我们这里边儿写的这个规则的话呢,是便于我们去做一些分析,做一些判断啊,让我们写操库的时候呢。是不是大家呢,要做一些注意对吧。但是这里边的话呢,我们说都还是基于这个成本的考虑的,我们在写这一点的时候呢,其实是想强调呢,就是如果呢,咱们这个位置写的是等于ABC,那毫无疑问呢,查询化器呢,是一定会使用我们的索引的,但是呢,如果我们写的是不等于的话呢,这个时候查询净化器呢,就有可能会放弃我们这个索引啊,所以咱们前面举例例子啊,是说你写不等于的时候呢,所以呢是会出现失效的,但是哎,咱们不要把它理解成只要出现这个不等于号的话呢,就一定不会去使用索引啊,不要这样去想。
11:07
啊,还是基于这个成本的考虑啊,这个不知道我刚才这个解释呢,大家是不是能够听进去,然后回过来的话呢,咱们再说这里边儿这个例子。好,大家看啊,这个时候呢,我们写这个age呢,叫不等于20,然后这个时候呢,咱们做一个查询啊,你会发现呢,咱们这个位置呢,K确实是不是没有使用上这个索引,对吧?哎,确实没有使用上索引,然后的话呢,诶我CTRLC一下,咱们把这个呢做一个修改,诶比如说呢,我就想往这块去靠,我这呢就可以写成H,然后呢,我写一个这个name,好,那么大家呢,此时你再去看来我们选中了做个执行。哎,你看发现的是不是它用上我们这个缩引了。啊,似乎呢跟我们前面讲的就违背了,说老师呢,你说我不等于的时候呢,不能用缩音,现在呢去用上了,你前面是不是讲错了,没有讲错啊,一切都是基于成本的考虑,对吧?好,就是说我们要用等号的话呢,就是没啥说的啊,你比如说这个位置我们要写等号,是不是一定能够用上索引对吧。是吧,一定能用啊,索引啊,这个我都不用啊,不用这个胆战心惊说哎呀用没用啊,哎,这肯定会用的啊哎,只不过呢,就是我们在不等于的时候呢,是会导致这个失效的啊哎,那为什么说咱们这个位置呢,就没有让这个索引去失效呢,就是因为呢,诶它产运化器呢,经过判断以后呢,发现诶我要是用上这个索引的话呢,诶我就省去回表了啊,因为呢,你有一个现成的索引可以用,诶然后就用覆盖索引嘛,说我不用回表了,然后把。
12:25
用回表这个成本呢,我们砍掉之后呢,诶这这我我这样说一下吧,大家可能有点绕哈,就是说诶我们呢,本身呢,你要是用这个索引的话呢,首先我们要针对这个二级索引,是不?我们要进行一个呃运算是吧,这是一部分,然后呢,我们是不是还有一个回表的操作啊,这呢相当于是两块的这个成本。啊,那两块成本呢,加一起呢,发现呢,不如我直接呢,就是不用索引啊,就是进行全表的一个扫描,这个这个便利啊,这个过滤是吧,要好一点,诶所以说呢,咱们在上面的时候呢,就没有选择用索引,但是呢,这块呢,由于我们可以使用覆盖索引呢,是不是这个回表的成本呢,就给砍掉了,这个一砍掉的话呢,发现诶你这个时间呢,比我们进行全表的一个扫描呢,来的时间要少,所以呢,他就大胆的使用了我们这样的一个索引。
13:11
啊诶,想必呢,我已经把这个呢说清楚了。OK啊行,这个呢,就是我们说的这样的一个问题啊,这样一个问题。嗯,诶,这个我们到哪啊,再拉回来啊,再回到我们这个覆盖索引这个位置上。这呢是咱们说的这一个例子了啊,这个例子,然后再呢,给大家举个例子啊,这个例子呢,相当于又会打破咱们前面说的这样的一个规则啊,规则呢本身呢,是不是就用来被打破的,对吧?好,我们再展过来。诶,就是咱们呢,得先去什么呀,建立一些规则,然后呢,咱们再去打破这个规则啊,应该是这样子的,如果一上来呢,就告诉你说说这个世界啊,是复杂的,是没有规则的,那就不行了,就跟说我们教这个小孩的时候呢,咱们得先告诉他呢,就是世界呢是有爱的是吧,世界上呢还是好人多啊,善有善报,恶有恶报,先得建立一些最基本的这样的一些规则啊,你得告诉他这个世界的基本规则是什么是吧?呃,人不应该是说谎,呃然后后边呢,这个孩子呢,成长以后呢,发现世界上他还是有坏人的是吧?呃,人呢,在有些情况呢,也是会说谎的,诶那么呃,经历过这些生候呢,他可能还要翻过来说啊,实际上诶可能不都是好人,但是还是好人要多一些啊,我们这个还是。
14:18
要要乐观一些去看待这个世界是吧?哎,应该是这样子的啊,你不能一上来的话呢,就说一些很复杂的,就搞不定了。好,那这时候我们再看这个例子啊,这个是咱们这个上面呢,叫举例一啊。诶下边呢,我们这个叫举例二行,诶看这个啊,这个伊斯兰啊select星,我们这啊威尔name的like他呃前面呢,我们提到过啊像这种呢,就是模糊查询上来呢,就来了一个,诶百分号啊这个通配符的,这个呢,我们就用不上这个,诶索引了是吧?诶这个当然前提的时候呢,我们前面是个星啊OK,然后呢,这时候我再创建一个,那这个其实我们前面已经创建过了。啊,这个你要测试一下的话呢,发现已经有了,就没必要创建了是吧,好,我这块就把它删了吧。
15:01
那我们这块呢,你看去执行的时候呢,我还是写的这个上来就通背符了,前面这个呢,我只是把它句化成了叫ID和这个name这三个字段啊,那这时候呢,我们再去做这个执行的时候呢,大家就会发现呢,这个位置是不是使用上我们这个索引了。哎,那这个原因呢,跟我们上面呢是一样的啊,我们现在用的呢叫age name,那这两个呢,是联合索引,最多呢,我们再配一个你的主键ID,哎就凑齐了,最多就这仨是吧?诶大家你可以删啊,比如我们把这个name呢,我们给删掉之后呢,咱们再去做这个查询,是不是照样可以用,对吧?诶这个是OK的哈,像那样呢,只要呢,我们不用回表了啊,这个时候就考虑呢,诶用上我们这个诶索引。好,那么关于这个覆盖索引的话呢,其实不是特别难啊,我们就说清楚了,然后接下来的话呢,我们来看一下这个覆盖索引的一个利弊。啊,利弊啊,其实呢,一开始我在准备这个课的时候呢,我只写了一个覆盖索引的好处啊,只写了一个好处,然后就列了一个两个这样的好处,呃,然后还是基于咱们一个最基本的一个事实和原则,就是说任何事物的出现啊,它都应该是有利有弊的。
16:03
啊,我觉得这个呢,大家也应该带到你的学习当中哈,呃,你要想对这个东西呢,有更深刻的理解啊,总有一些同学会问我说老师啊,你学这个技术的时候,你是怎么学的是吧?诶其实的话呢,这个技术学的话呢,你得先看他这个,呃,实际应用的是什么样子的,怎么能够学的深呢?就是你不断的去问为什么,诶不断的去问为什么,当然呢,这个为什么的话呢,你到一定情况呢,就可以适可而止了。啊,就没有必要呢,不停的去往下探啊,探到一定程度呢,可能已经没有必要再去探了,因为毕竟人的精力是有限的,对吧?但是从我们教学的角度来讲呢,可能我要往下探的会多一点,可能在开发当中呢,你能用到这儿是吧?面试的时候呢,可能再诶恶心你一下,再深入一点,那讲课的话呢,可能我会再讲的多一点啊,那再往下的话呢,那总不至于到这个一加二,一加一等于二这个程度了,是吧?哎,这个最原始的这个程度去比较,那就没必要了。呃,适可而止啊,但是呢,你可以通过不断的问为什么这样一个角度呢,呃去不断的往下去探是吧,然后另外的一个呃思呢,就像现在里边讲的也属于这个一个呃思维方式哈,就是说呢,呃任何东西的出现啊,都是有利有弊的,你比如说呢,我们。
17:07
大家学习这个框架也是一样的是吧,这个框架的话呢,是不是层出不穷是吧?诶这个以前的话呢,S啊S啊有服务啊等等,那么每出现这个新的事物的话呢,肯定是对旧事物的一个迭代,那相应的就会有一些好处,那么同时的话呢,你还要去想一想它有什么样的弊端啊,因为任何东西呢,它都是有利有弊的。啊,你就像这个,呃,在这个商场里边呢,都拉着你去办这个这个这个信用卡是吧,什么办信用卡可以领一个这个一套这个厨具,或者呢,你可以领走一个这个行李箱啊,一看行李箱质量还都不错啊,说你办了以后你可以不开卡是吧?这个这个还没有这个年费啊等等的啊你想想这种好事的话呢,呃,他是做慈善的嘛,肯定不是嘛,是吧,那你就要想他这有什么样的弊端啊,甚至说有什么猫腻是吧?啊你有可能在那里边呢,会会踩坑啊。任何事物呢,都是有利有弊的啊,那这时候呢,所以我就去想,哎,这个我们要加个弊端啊,我一定要加个弊端,哎,确实也能加上弊端,好来我们看一下啊。
18:04
覆盖索引的这个好处是么呢?第一个它避免了这个DB这个表进行索引的二次查询,说白了就是避免回表了,那避免回表的这个明显的好处是什么呢?诶大家通过我们这个例子呢,不就明显看出来嘛,那成本少了以后呢,你发现我们在查询的时候呢,就优先考虑它了,就不用像原来一样呢,直接就进行这个全表的一个呃查询的是吧,那这个呢,性能是比较差的哈,呃,就是我们有了一个更优的一个选择啊,使得我们整个呢,执行时间会更短啊,提高了效率。第二的话呢,这里边提到说把随机L呢变成了顺序L啊,这个大家能不能理解。啊,这个我来解释一下啊,比不妨呢,咱们就还用这个图了,你看啊,这个如果我们原来呢,还需要回表的时候呢,比如我们查询假设啊,咱们现在查询的是一个范围,我让这个C2的话呢,它是比如说从二呢到20吧。诶,这是不是一个范围对吧?那我们最终的话呢,是不是可能查询到是不是多个这个呃数据啊,在这个C2这个二级索引的叶子节点当中,那么呃,如果说我们需要回表的话呢,你想想啊,我们这些数据呢,可能是在一个页当中的,或者说呢,也可能不在一个页,但是这些页呢,它通常的话都还算是这个连续的啊,我们都放到一个是不是区里边了,一个区呢,是不是有64个连续的页,对吧?哎,乘以16KB呢,是不是正好一兆的空间啊,咱们前面讲过对吧?好,呃,那如果说呢,我们需要回表的话呢,我们呃拿着啊你这里边儿的这个值,诶回到我们这个。
19:27
呃,居速索引当中啊,居速索引当中的话呢,你可能是在这块,然后这个在我们C2这里边儿呢,其实是挨着的这样一条数据呢,但是你要再回表过去呢,有可能是不是跑到很远的一个位置上啊,那有可能是不是这个跟另外的下一条数据就在不同的页里了啊,我们这里边呢,是一串一堆数据连续的,然后你再拉回去的时候呢,是不是就有可能它们存放在不的页,而不同的页的话呢,它也有可能就在不同的区,那就意思呢,就是我们回转的时候呢,其实你是一个随机IO的。但是呢,你要是不回表的时候,你看我们只查询这些数据,由于呢,它本身就是有序的,你要进行这个范围的查找的话呢,本身这些数据挨着呢,它就可能在一个页里边,即使不在一个页里边呢,那页呢可能在同一个区里边,它本身呢就是连续的,我们这块呢,是不是就是一个顺序IO了。
20:14
相当于呢,我们砍掉了,虽然看似是一个回表的操作,但是其实我们砍掉了一个随机IO,哎,我们这里边儿呢,只需要进行一个顺序IO呢就可以,所以这个性能的提升呢,还是非常不错的。啊,由于呢覆盖所以呢可以减少数的搜索次数,显著的提高性能,所以覆盖所以呢是一种常用的性能优化手段。啊,然后这块的话呢,大家想想弊端啊,你能想到吗。啊,你能想到吗?诶这块你看我写出来的哈,诶我们说这个索引字段,这个维护啊,是需要付出代价的,这个大家认可对吧?OK,所以呢,我们前面讲的说你不要诶无故的去多创建这个索引啊好,那么大家你想咱们为了要用上这个覆盖索引,那你想我们这个s select的时候呢,你可能就会去想说我这块呢,呃,列了这样的呃四个字段吧,本来的话呢,我们这个写这个where的时候呢。
21:04
呃,这块我们这个写了俩字段,咱们可能一开始想说针对这两个字段呢,我们建一个索引,现在话呢,一看说哎呀,我这列了四个字段,呃有可能用不上这个索引了,怎么办呢?我把这个索引呢建的长一点啊,你是不是把这个这两个字段也加进来了,相当于呢,就是原来这个联合索引的话呢,我们本身呢,需要两个字段啊就可以了,造一个,然后呢,使用的空间呢小一点,现在你非得要把它建成四个,呃目的呢就是要用上它,然后呢,呃,其实说白了就是我们只想查这两个,呃这个过滤的条件在现在你又无误的,是不是又多补充了两个,哎,目的就是往这块去靠,其实我们这个呃索引的话呢,就是有点这个冗余了。啊,那这个成本呢,就会更高一些啊,空间占用的也会更多一些啊,那么到底加合适还是不加合适呢?这个呢就是业务的D,或者我们业务的数据架构师呢,他要衡量和考虑的问题。啊,也算是一个弊端,OK,这呢,就是我们讲的覆盖,所以。
我来说两句