00:00
好,那么对照呢,我们适合在哪些情况呢,创建索引之外呢,我们来看一看哪些情况下不适合去创建索引啊这个呢,有很多呢,其实我们都不用做这个具体的测试了啊,大家一看呢,其实就能够去理解,行,那首先呢,第一个啊,这个呢,其实一说呢,大家就能明白。然后这呢,先填过来啊第一个。说呢,在外当中使用不到的字段呢,不要设置索引啊,那你这个呢,就是造了索引也没有用是吧?那所以呢,就干脆就不要去造了,这个呢外呢大家可以再做一个扩充,不是我们这个过滤条件当中,包括咱们这个group当中,包括呢order当对吧?在这些结构当中都没有使用到某个字段,那你就不要去创建了啊,这个呢就纯粹呢是浪费感情啊好下一个的话呢,就是我们这个叫数据量小的这个表当中啊,最好就不要去使用索引了啊,这个小题大做对吧。叫叫什么杀鸡焉用牛刀啊,就这样一个情况,那数据量小的话呢,本身我们做一个查找其实就花不了多少时间,那你再去创建索引,首先呢,占据空间,占据这个文件的存储空间,对吧?那其次的话呢,我们再去查找的时候,每次还得去找索引,然后再去找这个表中的数据,你可能用的还是一个呃,非居非这个剧组索引,呃,还得回表是吧?哎,还不如我们直接呢去查找来得快。
01:16
那我这块呢,就不去写这个例子了啊,这呢是我提前造好的一个例子,我也真实的做了一个测试,简单的给大家说一下,我这呢造了一个表,这个表中呢有俩字段,ABA呢是主件,B呢是一个普通的字段,然后呢,我写了一个存储过程呢,就是往这个里边呢去添加了900条数据,这个数据量呢不多是吧,900条数据,然后呢,我们去调研存储过程呢,把这个数据呢添加上,然后呢我们又造了个表,跟上面的表呢,区别唯一就在于在B字段上呢加了一个索引。诶,然后存储过程呢,也是给他去添加数据的,接下来的话呢,我针对这个B这个字段呢,去做一个查找,查找的时候呢,先看了一下这个没有使用这个索引的情况啊,针对B字段这个查这个九八,这个七九是吧,这样的一个信息查完以后的话呢,诶花了是这个0.00啊这个秒,那我们针对这个有索引的这种情况呢,花的也是0.00秒。
02:06
啊,那有的时候呢,大家你可以把这个字段呢,比如说你再设成是个字符串型的是吧,那再查找看看,那有的时候它可能这个就不是0.0了,可能会有具体的0.0几秒,甚至说呢,有可能会出现呢,你使用上索引以后花的时间呢,比我没有使用花的时间呢,可能还要多一些。啊,那这我们就完全就没有必要了啊,数据量因为在小的时候呢,完全就发挥不了所引的一个性能。啊,在这个数据量呢,比如说低于1000行的时候呢,大家是不需要创建索引的啊这就过了,那接着我们来看这个第三个点。啊,这个第三个点。啊,像这一点的话呢,我们理论上呢,一说大家就能理解说有大量重复数据的列上呢,不要去创建缩引,咱们在上面讲适合创建索引的时候呢,提到个说区温度高的列上,我们适合去创建索引,那区温度低呢就不适合创建了啊其实就是我们对应的这一点啊,跟上面这个第九个点呢,是一个呃,彼此映射的一个关系,那我们在讲上面群温度的时候呢,是不是也提到过这个性别这个概念。
03:04
啊说你这个学生里边呢,就只有两个性别,然后呢,你在这个性别上呢,去添加一个索引,这个我们使用它呢,去呃过滤啊去做这个索引,这个性能呢,其实是很低的。因为你会查到啊,比如我们具体到这个叶子节点上了,有一半的数据都满足你的需求,那这个索引的意义就不大了啊,对吧?啊这个场景,那再举一个例子,就是我们这有个学生表,学生总数呢是100万人,说男性呢只占十个人,那这呢可能是一个女子学校了,是吧。啊,但是为什么有男生呢,比较特别而已啊,这个或者是一个师范类的学校啊,这当然达不到这100万人了啊,像我本科呢,读的是这个师范类的学校啊,那确实特别爽,这个在学校里边的话呢,据说啊说我们这个男女比例达到7:1,但是这个谁也没统计过啊,在学校里边确实经常见到女生呢,是成群结队的啊,男生呢就很少,这个是一波一波的,你要见到男生一波波的,呃,不是打篮球,那就去网吧了啊,这个这样的一个场景,然后后来呢,读研的时候呢,读的是北京那个北航,北航呢是北京出了名的男女比例严重失调的学校啊这个,呃,读了研究生以后呢,特别的怀念本科啊,这个女生多的这种场景。
04:12
啊,这个拉回来啊,这个学生总数呢是100万人,男性呢只占其中的十个人啊,相当于呢是十万分之一这样的比例,这个比例的话呢,我们上面如果加上一个,呃,所以的话呢,这是有意义的啊,查询的话呢,这个性能也会去提升啊这呢还具体举了一个例子啊,做了一个演示啊这个呢,我们就直接理论上这样给大家一说,你能明白啊,就没有必要呢再去花这个时间去测了。行,那我们针对刚才说的这个100万里边只有十个男性的这种情况,你在我们这个性别上面,你加索引跟不加索引的区别,这个是0.6多这个秒,这个呢是0.0啊多这秒大概就十倍这样一个情况啊,那么什么情况下呢,我们去加或者不加呢?说当数据的重复度比较大,比如说高于10%的时候呢,我们就不需要再给大家去做添加了。哎,高于10%,我们就认为呢,这个重复度呢,算是比较高的啊,RC一下把这个结论呢,我们给他拿过来。
05:04
好,接着往下看,说避免呢,对经常更新的表呢,去创建过多的索引啊,这个一说呢,大家都能够知道。啊,这个我们来一个啊四。啊,这里边儿呢,我们有两层的含义,第一个的话呢,就是我们频繁更新的字段,频繁更新这个字段,这个字段呢,大家啊,不一定呢,要去创建索引。啊,因为你要创新索引的话呢,每次更新这个字段这个所以呢都得跟着改,这个还挺浪费这个时间的是吧?诶影响这个效率,那第二层含业的话呢,就是我们对这个经常更新的这个表啊,也不要创建过多的索引,因为你创建的索引比较多的话呢,那你再去更新这个表的时候呢,是不是就有可能会影响到你。比较多的索引了是吧?啊,你影响到索引越多的,我们相当于更新的时候呢,去更新表数据的同时呢,更新你这个索引的这个成本呢,也会更高啊做一个累加,那这个最后呢,会影响我们更新的一个速度啊两层含义啊,一个是更新的字段,一个是经常更新的这个表啊,这个说明下面一个呢,说不建议用无序的值呢,作为这个缩引。
06:06
哎,这个呢,我们稍微解释一下。不要用无序的这个值作为这个索引,为什么呢?你像我们这个索引呢,最终生成的这个B加数,从叶的节点上来看的话呢,是不是我们这个值都是一个有序的,那默认的话呢,我们是一个升序的一个排列,对吧?那你想想,如果我们要是使用这个无序的值,比如说身份证号啊,比如这个UUID啊,虽然说呢,他们包括这些啊,虽然他们满足这个,呃,唯一的非空的这样的特征啊,你要是把他们设置成这个主键的话呢,我们生成的这个句子索引,那你想想,诶回头呢,又来了个UID,一看呢,它应该放在前面,是不是我们时长性的要进行这种页分裂。对吧,诶数据的一些这个转移,那这个成本呢,其实也不低啊,所以大家呢,就通常呢,咱们使用的那个主件呢,是不是叫auto increment让它自增的,所以呢,这个数据呢,咱们通常都放在这个,呃,相应的这一层的这个右边了啊是就不会出现这种页分裂的这种场景啊,会更好一些。
07:00
下边一点的话呢,说删除不再使用或者很少使用的索引啊,这个就不用多去啰嗦了吧。这是第六个点。啊,不经常用了,那你就不要啊,就不要保留它了啊,这个呢,以免呢,对我们更新数据啊,还做成这个性能上影响影响,还浪费我们的存储空间,对吧?下边一个呢,说不要呢,去定义冗余或者是重复的索引,这个呢是大家在这个开发当中啊,有可能会不注意的这个点啊,你去定义的这种冗余或者重复的索引呢,怎么叫冗余呢?那我举这个例子。啊,举了一个例子,你比如说呢,我们针对这个啊person in这样的一个表,我呢定义了一个联合索引,这个联合索引当中呢,诶是按照name和phone number啊先后顺序来的,诶这是一个联合索引,然后呢,我又定义了一个name啊,针对它的一个单列索引,那么诶我们的结论是什么呢?就是大家呢,就不要呢再去定义它了,这个定义呢,纯粹就是个冗余的,为什么呢?如果我们在外当中呢,你只写了一个内幕,那其实的话呢,我们直接用这个索引就可以了。
08:04
对吧,诶用这个索引跟你用这个呢,其实性能上效效果上来讲其实是一样的啊,诶那你这个联合索引的话呢,它还可以针对这两个字段或者这三个字段呢,你在一起使用的时候呢,它也还能运用你这个联合索引,就是用这个呢,比这要好一些啊,它这个功能呢,完全是不是可以通过这个索引去体现呀。哎,我们下边这个呢,就是一个冗余的场景啊,就没有必要呢去添加了。哎,咱们通过呢,下下章啊,下一章讲这个explain的时候呢,我们遇到过这种,遇到这样场景呢,咱们再去啊,去给大家分析一下这个执行计划,诶大家就懂了啊好,下边这个呢,叫重复的缩引,针对我们这个表中的这个C1这个字段呢,我们有一个主键,那其实就已经有主键缩引了,然后呢,又加了一个唯一性的缩引,又加了一个普通的缩引,那这两个呢,是不是就完全是一个重复的缩引,就完全没有必要去添加,纯粹呢浪费空间对吧?OK。好,那么最后的小结是什么呢?就是所以呢是一把双刃剑啊,能够提升我们的速度,但是呢,也会降低我们这个插入更新的速度,同时呢还占据磁盘空间,所以呢,诶我们就要诶这个根据实际情况看看到底是不是个加,加到什么程度啊,也要控制一下我们相应的这个数目啊,这个咱们都提到过了。
09:14
好,那这呢,就是我们把这一章里边关于索引的设计原则啊,里边提到了两个大的这个项,那相应的这些注意的细节呢,大家该记的话呢,要记一下。那这一章呢,咱们就说到这儿,那么关于我们这个索引的一个优化的点呢,比如说我们加上这个,呃,这个在这个字段上加上索引呢,那是不是我们查询的时候呢,就一定会提升性能呢,也不一定啊,为什么呢?因为有时候呢,我们一些错误的circle的一些写法呢,会导致我们这个索引的失效,咱们这儿呢,放在第十章当中,咱们再去讲,大家在面试当中呢,你可以结合着咱们讲到的这里边的这些规则和我们的这些规则呢,哎,大家呢,去提一下这个关于索引优化的这个内容。啊,这呢就比较完整了。
我来说两句