00:00
大家好,呃,我是上硅谷扎va伊义学科的夏磊老师,呃,接下来和大家分享一道面试题,MYS什么时候适合见索引,什么时候不适合见索引啊首先在之前咱们得先了解一下啊,这个什么是索引啊?哎,MYSQL官方给出的定义,索引是什么?是帮助MYSQL高效获取数据的什么数据结构?简而言之,索引是什么数据结构啊,它是一套数据结构啊,那它的优缺点,优缺点分别是什么呀?优势什么?劣势是什么?咱们看一下呃,优势是什么呢?诶各位应该都知道了啊,这个索引的优势什么?是不是我这个诶数据太多了,色后查询慢了,我需要建索引,那它优势诶很明显,什么是不是检索查询数据的快啊,还有什么呢?诶,我对应的数据排序能用上,索引也会非踌快。优势就是。
01:00
检索查询快,排序快啊,这是它的优势,那各位劣势呢?啊,这块很简单,既然你什么查询快了,那你做什么呢?呃,Insert update delete,你做所有的什么呢?写操作的时候,哎,速度会变慢啊,为什么会变慢?各位你除了诶维护箱的写项的表,你是不是还得改你的索引啊,啊相当于你维护了两套数据啊索引慢啊,这是它对应的什么呢?写操作会变慢,还有什么?诶你对应的索引是不是要写在你的磁盘空间上,它会占你的磁盘空间啊,这是它对应的优势和劣势,哎,那到底什么情况下适合建索引,什么情况下不适合呢?哎,咱们整理一下哎对应的诶什么时候需要创建索引?首先各位都知道了,诶主键啊,MYSQL会默认给你创建索引啊,这是自动创建的,还有呢,诶,你这块写的SQL频繁,作为查询条件的字段应该建。
02:07
索引建了索引以后查询会变快,还有呢,哎,这块你多表关联查询关联的字段啊,也就是外键这块必须要建立索引啊,建立完索引以后,两表关联查询会变得更快一些啊再往后诶单键和组合索引的选择问题,各位啊,哪个更好一些啊,当然是组合索引性价比更高,为什么啊,一般情况下mysco啊,不是说啊,你见了每个字段都建索引,这MYSQ都能用上,这不是MYSQ会选择什么呢?他认为最优的一个索引使用啊,那这块呢?呃,如果你建的是组合索引,诶我这个查询的字段全用上了,各位是不是?哎,你这块儿查询效率更高一些啊啊这就是啊,选择问题还要再往后,哎,在我的查询中排序的字段,哎排序字段如果说啊,你用上索引了,哎,这块效率更高啊,还有时就是对应的。
03:07
啊,你统计分组的时候,哎像的什么字段,用上索引了也会快,那这块问题来了,到底是哎我这个哦order排序更伤性能呢,还是group诶这块分组更伤性能。啊,这块诶应该是什么分组group版,为什么呢?你做分组操作的时候,其实里面已经做了一次排序了,它是怎么做的,先排序后分组,所以说group buy其实是包含order by的啊这两块排序和分组也要用上索引啊,这样你的circle口查询起来会非常的快啊那这块什么时候?诶这块不适合见索引,咱们也整理了一下,各位看一下诶,如果你的表记录太少的时候,诶不要见所引叭,如说哎,我这个表里面几行数据,几十行几百行,这些表都是数据量非常少的,就不需要见索引了,见索引的效果也不大啊,这块各位需要注意,还有就是经常增删改的表或者字段,比如说哎电商项目中,哎电商的表里面,哎,比如说用户余额字段啊,是不是你经翅变啊,像这些字段就不适合。
04:23
键索引为什么还是它的诶优缺点是什么?写操作会更慢,你如果给什么诶比如说咱们的用户余额,诶相应的字段见了索引了,那是不是频繁进行诶相的update的操作,诶进行诶插入相应的信息啊做一些诶信息插入接做一些写操作,诶它会变慢啊这是咱们对应的什么呢?诶经常增删改的字段不需要键索引还有什么呢?你where后面条件用不着的字段啊,你对应的这个字段就不会出现在where后面做什么筛选字段用,那就不需要建索引了,咱们建索引是为了什么?各位还是它的特点是不是检索排序快啊啊这块诶。
05:09
结合它的优势这块呢,诶,如果V后面用不到的,诶不会出现在什么检索的相应的条件中的,不需要键索引,最后一点过滤性不好的不适合见索引,什么叫过滤性不好的,就是诶你这个字段啊啊这块诶没有什么,诶通过一个条件不能诶筛选出来更更少的相应的数据啊,咱们举个例子啊,比如说哎,人的性别字段啊,这块你用户表有个性别字段,这性别字段无外乎什么男人女人或者不知道啊,就算你啊这块,哎等于男人你搜索出来的有可能只是1/3啊,这就是过滤性不好的字段,相对而言,过滤性好的字段是什么?各位想想啊,啊,有可能我根据这个筛养条件,唯一能定义出来一条数据的时候,这就是过滤性好的,比如说诶手机号字段,还有什么呢,你的身份证号字段啊,像这些字段。
06:09
适合建索引,而什么呢,像性别啊这种什么呢啊,这些字段就过滤性不好的字段就不适合创建索引,好这就是啊哪些情况下在需要创建索引和哪些情况下不需要创建索引,各位啊这些这些情况各位需要记忆一下。
我来说两句