00:01
接下来呢,叫做索引。所以。这个索引啊,其实在真正的数据库。底层应用中还是挺重要的。但是对咱们做系统,呃,数据库应用开发级别来说的话,不太重要。不太重要,为什么这么说呢?因为现在数据库已经帮咱们封装好多已经现成的索引了,比如说咱们的主件之类的。那咱们来看一看,到底什么是索引啊,索引,其实这个索引在生活中咱们就见过。比如说一个大楼。比如说咱们别说大楼了,去医院是吧,医院的每个楼层都会有一张图,这个图告诉你楼层索引。啥意思呢,就是说这个楼层这块是眼科,这块是耳耳鼻喉科,他告诉你哪个屋是什么样的科室,对吧。是就是索引的一个目的,就是给给你做一个引导。
01:00
对吧。好,这是生活中的索引。到了咱们汉语中的索引是什么样的呢?是这样的。咱们小时候就学过这个新华字典是吧,我这找了半天找这么个图,我记得我上学学那学那个。不是这个样子的哈。这个新华字典哈,假设呢。字典里边大家都知道是存放咱们中国的所有的常用文字是吧。任何一个字是不是在这里面都可以找得到啊,并且有详细的解释对吧。好,你呢,现在把你学过的查找字典的方法忘掉。我就让你找索引的这个所这个字儿。你会怎么去找?对吧,如果你没有学习什么什么偏旁部首之类的,没有学习什么汉语拼音之类的,你只能一页一页翻每一页的每个字的去,对吧。哎,去对比。
02:00
哎,这是咱们最有效也是最笨最慢的方式是吧?好,后来呢,咱们学习了这个东西,偏旁部首汉语拼音。学习了查找字典的方式之后,你会发现我想找这个字。变得很简单了。是不是几下就找着了,怎么找啊,先找它的偏旁部首,然后再看他写了几划是吧,然后在前边字典的头几页。是不是里边告诉你,比如说八环是20页至50页都是八环的,是不是这个意思啊,然后你上这20页到50页之间,是不是翻一翻就找到这个字了。对吧。那么咱们来看那前整个字典前边这个偏旁部首了,汉语拼音这些页码叫什么呀?就叫做整个字典的索引。
03:01
整个字典的索引。所以你在咱们再来确定概念。索引到底是干什么用的?首先从医院这个事儿,你进到这个楼里边,我怎么知道快速的知道这个屋是眼科,或者说我怎么知道眼科怎么走。你别说问人啊,别说问人抬杠子是吧,你是不是得看着这个地图知道,哎呀,前面左拐第三间屋对吧。你是不是得看那个楼层那个索引图啊。OK,那么看这个图的目的是什么呢?你说找到这个屋,其实找到这个屋你挨个屋去敲一遍也能找到,但是你看到这个图是不是能够。快速的找到这个课时啊。咱们再看这个字典,你在前面翻什么汉语拼音,翻什么偏旁部首有几划的。但是目的是什么呀,找这个字,你要不看前面这个东西,你挨页翻能不能找到,也能找到。
04:00
那么你翻的意义和在哪,是不是也是快速的找到啊?所以咱们终于知道索引是干什么的了。OK,所以就是加快查询的。OK吧?哎。说了半天,什么是索引,给大家介绍完了。就是加快查询的。好,再往后看。那什么是索引呢?这两句话,其实这两句话一点都不难背啊,看着就可以了。首先通过索引啊,咱们可以大大的提高数据库的检索速度。检索速度就是查询就是查询速度,OK吧。哎,查询速度快了。数据库的性能是不是就提高了?尤其是这种,比如说大公司什么百度了这些海量数据是吧。速度快了,那就是生命对吧,哎。
05:00
然后第二点,提高速度的同时消耗大量的时间和空间。哎,世界的万物都有两面性,你的速度上去了,你的成本就高了。对吧,你想降低成本,还想提高速度。往后学有招,那就是后期要学习的分布式。哎,分布式。降低成本,加速加快速度。加快速度。那么什么是索引呢?其实大家已经确定了,整个这一篇很好记,大大提高速度,速度的就是索引。第二点,提高速度那肯定要消耗一些东西。肯定消耗一些东西啊,还有同学说刚才不有不说说了吗?啊,降低成本也能提高速度分布式嘛,哎,你分布式其实有的时候。成本可能会更高。
06:00
但是速度呢,不是一般的快啊,会很快很快啊。以后学的时候再说好吧。好了,咱们来看一看如何创建索引,创建索引create index这个玩意儿,这个玩意儿,然后删除索引这么搞。啊,这个代码级别的东西,还是那句话比较简单,比较简单啊,这个东西看一看。来,比如说现在呢,我要创建一个。哪去了?这儿呢?我要把这个这个哪张表创建个索引嘞。就这个个这个员工表吧,行吧。看这个代码,就这样搞create index。Index index。然后呢?起个索引的名,你看那个官方语法哈。是所以名称啊,这个名称啊,你自己随便起啊,比如说我就习惯叫做。
07:00
这个这个这个I做前缀,后边你爱叫啥叫啥,我就叫ABC了,行吧,别的了,员工吧。员工啊。好嘞。然后呢?然后索引名称搞定了之后,你这个索引建立在嗯。在哪张表的哪个列上。员工表的。First。Name列上。OK,这个就是结果了。你看读一遍,你翻译一遍就知道啥意思了。创建索引它。在这张表的这个列上。行。没问题吧,上这边来刷新一下,其实刚才看到了有table,有will,还有一个。Index。Index就是索引的意思。来瞅一眼。是他不。
08:00
是他不是吧?而下边儿这些索引都是什么鬼呢?是这样的。是这样的,你看下面这个索引呢,咱们点这个视图之后啊,这边就出现了。他们这些索引都在这个表空间上。那这些索引呢?都建立在这些表上。看到了吗?都建立在是不是每一个表啊。那你就想啊,我们每一个边都创建了什么鬼呀?其实,主见。主键就是索引。主键就是索引,那你就想那主键它提高查询速度了吗。肯定提高了,因为他提供的是唯一的呀。唯一的呀,那肯定是帮你提高速度了是吧。哎,这样的话,它这些系统啊,都是默认建主建时给你起的名,哎,他是默认给你起的名。而咱们自己建立的,是不是叫这个名字呀。好,这样的索引呢,就创建完成了。创建完成之后。
09:04
创建索引。创建完成之后。所以如何应用?如何应用Oracle?Or Oracle会自动使用,所以。所以怎么应用你不需要关心了,你不需要关心。好吧,记住自动这个关键字。自动这个关键字。那我怎么把这个索引删除呢?哎,删除一般都是。Index叫做em,不是imp。执行。这边看看还在不在。没了吧?
10:01
好,这个就是创建索引和删除索引。其实大家知道索引之后啊,我应该把这个东西再给大家捣鼓捣鼓啊。啊。所有的。怎么说呢?底层原理。我把这个用文字给大家描述一下啊,描述一下。这样就知道了。若没有。所以在搜索。某个。记录的时候。比如说查找。例如。查找,查找等于,内等于。王大拿。这个。诶。
11:02
比如说查找这个数据的时候,那么没有索引的话,他会怎么办呢?他会这么搞啊,他会需要。搜索。全部就所有吧。所有的记录。比如说把所有的记录都都找到。为什么呢?因为不能保证只有一个sa吧。只有一个王大拿。王大拿。对吧,因为王大拿是不是可能重名嘛。所以他们把所有记录都搞,都搞到手。然后干嘛呢?全都搞到手之后,全都搞到手之后。很麻烦吧,因为我就只想找王大拿,你何必把所有记录都搞一遍呢?所以这是没有索引的情况。如果有了索引。
12:01
若。在内列上。创建索引。Oracle。会。全表进行一次。搜索。将每条匹配的记录。呃,将每条。每条name的记录啊。把每条记录都呃。怎么说啊,将每条内目。值。记录。并排序。哎,他会每把每条都记录并排序,然后构建。
13:01
一个索引目录。索引目录,这个索引目录里边全都是内部相关的。OK。然后。然后在索引目录。中。哎呀,太长了,回个车吧。查找王大拿。查找啊娜娜,那么这个目录一旦构建出来啊,它就是一直存在的了。一直存在的,所以咱们在这里边去找王大拿就快了一些,因为他你看他帮你记录下来,并且是不是做了个排序啊。还有类似于什么呀。咱们写了一本书,写了一本书,每一页是什么,每一页是每页是什么,我在书的最前边是不是也建了一个书的目录啊。比如说第一篇咱们学习这个这个。呃,方法的重载。
14:01
方法的重载呢,是第三页开始的,然后方法呢,这个这个还有啥来着,重写是第七页开始的。这样的话,我在找王大拿的时候,我是不是可以快速的知道它对应的在哪个目录里边啊,所以我第二句话说的这个事儿就是创建索引目录,这是关键点。创建这个索引目录。那你看。像生活中一样,我这本书一共呢,出了800页。那咱们找一印刷厂,是不是印800页就够了,假设800页就是800块钱。对吧,花了800块钱印出一本书,但是你这本书印出来,我想找什么,什么学习的一些相关的资料,我得挨页翻,很累是吧。所以呢,我在前面加了。20页。这20页是什么?就是一个目录吧。就是么。好,那么我再去找这个印刷厂去印刷的时候,是不是应该是820元了。
15:03
对吧,820元,那么也就意味着我这本书出的成本是不是提高了。浪费了资源对吧,但是每个人拿到这本书之后。查找的速度是不是上来了?哎,就是辛苦你自己方便千万家。哎,你是成本高了,但是别人用起来方便,这就是索引,哎,这就是索引。这是索引的这个原理啊。那么所以呢,大家这个做一个了解就好了啊,其实如果真正的咱们,呃,公司里边呢,对数据开发。有一个咱不是叫Java工程师吗?什么Java这个架构师是吧。其实这数据库开发呢,有一个专业的职位就叫DBA。这叫DBA。哎,这个DBA呢,它需要掌握索引的全部全部知识,而这个索引大家可以搜一搜哈,这个知识想学透了,但是一本书。
16:02
一整个一本书啊,所以。就专门讲索引的,所以咱们呢,只是做一个了解就好了。知道所以是什么,是怎么回事就行了,你想真正的把所以玩的溜。把这本书读一读去是吧?啊,那成本就太高了是吧。啊,这个索引。创建索引的一些指导原则哈。比如说什么列上创建索引呢。频繁搜索的咧。比如说对咱们。如果是做这个什么京东淘宝之类的话,那你说哪个店最适合做做这个索引呢?商品名称。一定要做。还有商品的简介是不是一定要做呀?啊,一定要做哈。然后经常作为查询条件的列。比如说商品的产地也一定要做。
17:00
比如说我要搜索搜索,比如说搜索糖块,我想吃哪的糖呢?我想吃香港的糖。香港是不是作为查询条件?经常排序分组的分组也一定要做。我想查询一下这个这个分组查询嘛,比如说。福建产的茶叶。对吧,我想吃吃一吃内蒙产的牛肉。哎,都是做分组拉云嘛。经常作为连接的列就是主外键,这个主外键其实你根本不需要做索引了,为啥呢?因为主键和外键它俩本身就是索引。本身就是索引会帮你查快查询加速的啊。然后下边这些呢,不要见索引啊。仅包含几个不同的值,啥意思?性别列。还用做索引吗?就俩值,根本不需要。表中仅包含几行?你这张表里边儿一共十条数据,你告诉我你加快你再快能快到哪啊。
18:05
对吧,哎,再快他也快不出来。所以。这个注意。并且这一篇也需要记住一句话,这句话其实脑袋就记就能记啊。索引的创建,它会浪费空间。浪费资源,所以呢,并不是说见得越多就越好。能理解吧,哎,见的太多了。反而会让你的速度有所下降。OK吧,不要去往死了啊。好了,使用索引时注意的事项呢?第一点,这是属于数据库优化的部分啊。查询时减少使用星返回全部列不需要啊,不要返回不需要的列啥意思?我这样啊,数据库优化啊。
19:00
我想查询一下所有的学生名字。同学说了,哎呀,Student name写起太费劲了。直接这个。我看一下不就知道这个列所有的名字了。其实你这样执行的效率呢,很慢啊。真正快速的就是你也是麻烦,但是这样写一列的话,数据库执行起来是最快的。哎,就是说你要什么写什么。尽量减少星的使用。这是数据库优化部分啊。当然咱们现在是为了讲课完了更快一点,所以经常用听好吧,真正这个项目开发的时候能不用尽量别用。然后where子句中,如果多个条件表达式包含索引列的表达式应该置于其他表达式之前,啥意思这个意思?简单写一下啊,比方说A等于一,并且B等于二,并且C等于三。
20:00
我是不是有好多条件呀。好的条件吧,还好啊A呢,没有索引no。B呢,也没有索引。C这个列是内列,它有索引。所以最快的方式就是说把C放在。前面。这么写。能明白啥意思了吧?哎,就是这句话。索引列应该在其他条件表达式之前。好,避免在order by子句中使用表达式。啥意思嘞?这种哎,哪去了。这种方式。排序尽量不要是表达式出来的排序。OK。不要再这么不要不要这样写啊,但是这个条件没办法啊,只能这么写。以后呢,尽量不要这么写啊。最后呢?索引这个技术是数据库呢,自动使用的,一般情况下,一个表格只存在一个索引就够了。
21:07
不要创建过多。不要创建过多。啥意思?一本书。一个目录足以。是这个意思吧?啊,一本书你还想建多少个目录啊?哎,可以不用加那么多啊。好了,这就是这个索引全部的知识了。最后呢,简单总结。总结两句话啊。索引这个东西。它是自动被使用的。他干嘛了?加速的。虽然它能够加速,但不宜过多。那句话怎么说来着?敬酒虽好。不要贪杯是吧?
我来说两句