00:00
行了,咱们上节课呢,主要是说一下这个事物,各位啊,事物这块呢,咱们就说到这儿,那我们真正以后会不会在这个DOS命窗口里边。去写相关事物的这个circle啊,不会啊,因为我们是Java程序员,那我们Java程序员呢,我们肯定这个事物的控制是在哪啊,是在Java程序当中完成的。对吧,所以说呢,上节课呢,咱们打开两个DOS命令窗口,在这演示这个事物的隔离级别,你下去呢,有时间你就演示一下,没有时间呢就算了,但是今天讲的这个事物的一个理论呢,我希望各位能够一个深刻的印象,因为这个东西太重要了。就你得从本质上理解的事物啊,它是一个完整的业务,而这个业务呢。它需要多条DML语句共同配合才能完成。那为了保证这数据的安全,你就必须得保证这几个DML语句都得同时成功或者是同时失败。要想达到这个效果,你就必须得用一下事物这种机制。
01:11
嗯,就记住这个就可以,但你四个特性你得记住吧,Acid原子性,一致性,隔离性,持久性对不对,隔离性里边有四个隔离级别,你得知道吧。是不是咱说理论这个东西,你这个得会啊,这个得会对,然后两个词后语句你记住吧,Commit和什么。入,至于那个保存点回滚到哪个保存点,这个不用练也不用看啊,用不着用不着啊,用不着东西咱就直接直接略过不讲啊,也不提这个事儿,就简单提一下,有个保存点,我也跟你提了保存点,有的话我们可以回滚到保存点,但是我们以后的开发,实际上我们是不会在这个DO0窗口里面写代码的啊,我们的以后的开发是在Java程序当中控制事物的,也就是说我们讲完买次马上要讲那个JDBC加二语元连接数据库的话,这块我肯定会给大家详细讲一讲,我们这个事物是怎么控制的,JDBC当中事物怎么控制啊。
02:11
行了,那这块呢,咱们这个事物呢,咱就说到这儿了,各位啊,那再往下我们来学点新的东西啊。这个单词要会的啊,15。我们来看一看索引。所以。啊,就是这个这块的东西啊,索引视图,DB命令,数据库设计,三发制啊,一共买搜这块还有这么多,但剩下的东西基本上都是什么呀,偏理论的多一些,我们来看一看这个索引,各位啊。
03:01
怎么了,这是?又不行啦。没事吧,没事,我继续了啊,这块是要。网络是不是不太行啊,这个网络这个网络看看啊,咱们看一下这个网络是不是现在是有点儿问题啊。没事啊,我可以确保我的网络是没问题的啊,我这个网络是相当稳定的这块啊,相当稳定。如果你那边呢有问题呢,可是你那个终端的设备的问题啊,你先研究研究啊,看看怎么回事,我这边反正也录制视频的啊,到时候可以看看,没办法,远程班就是这样,远程班就是这个网络确实是一个不确定的因素啊这个东西。
04:05
好了可以了,可以可以了,你俩先别聊了,别聊了,他们先上课啊,我知道你俩这个在聊技术啊,不好意思打断你们,但是咱们现在正在上课啊,来看一看啊,首先呢,就是咱们这个呢,就是第一个啊,就是什么是索引有什么用。然后呢,我再讲讲怎么创建索引对象,怎么删除索引对象啊,再讲讲什么呀,什么时候考虑给字段添加什么索引啊,就是什么时候考虑,就是满足什么条件啊,我们把这个讲清楚其实就可以了啊。那首先什么是索引,我们得说一下啊,所以就相当于一本书的目录啊,就相当于一本书的目录。
05:09
通过目录可以快速的。找到对应的什么资源啊,那么在MYSQL当中啊,也不能说在MYSQ当中啊,其实Oracle中也是这样的啊,在数据库方便吧,诶查询一张表的时候,有两种查询方式。第一种方式是什么呢?全表扫描各位啊,全表扫描第二种方式是什么呢?根据什么索引检索啊,这个效率很高啊,这个这个多少,这个高能高多少,那不是一倍两倍。百十倍比这个还高,对对啊,第二种方式就是根据索引检索全表扫描,就是一个记录一个记录扫,如果这张表当中这个数据啊,就是这一列,这一列上的数据,注意听我的一个用语啊,我说这个表当中有一列,这一列上的数据达到什么上千万上千万。
06:21
或者上亿的这个数据,那现在呢,我要从这个做全表扫描呢,没有使用索引的话,它就会从第一条记录,真的是从第一条记录一直一直扫一直扫啊,直至他扫描结束。那这种方式呢,它是能找到这个数据,但是效率比较低。就像我所说的,我们要看一本字典,从头到尾翻翻翻,总有一天能翻到,你要你要找到字对吧,但这种方式你肯定就是特别慢,你扫描的范围还是很大,那所以呢,其实就是它可以有效的缩小我们的什么扫描范围。
07:00
啊,索引为什么可以提高检索效率,这其实它的原理啊,其实最根本的原理是缩小了扫描的范围。但是你得知道啊,索引不能乱加。明白吧?为啥呀,所以需不需要维护啊。三好比说你有一本字典,你这个字典里边的字发生了变化,你前面那个目录还得改啊。目录你得开啊。所以说这块呢,就是索引,虽然可以怎么着提高检索效率,但是不能随意的添加索引啊,不能随意的加索引,因为索引也是数据库当中的什么对象,也需要数据库不断的什么维护,是有维护成本的。
08:15
比如表中的数据。经常被什么修改?这样就不适合添加索引,因为索引因为数据一旦什么修改,索引需要重新排序。并且所以。啊,最主要是重新排序。啊。最主要的啊,因为数据一旦修改之后,所以需要重新排序啊进行维护。是有成本的。你这个一本书啊,一共十页,你还整个整个目录干啥是不是。
09:08
对,你你一一本书一共十来页,你整个不住两三页,你翻啥翻就就从头到尾翻完又咋地是不是,哎,所以说什么时候考虑给字段添加,所以呢,这个我可以先写上啊,就是第一条是什么数据量庞大,那宇彤老师这个数据量庞大,这个这有没有固定的值啊,就是必须得这是到多少多少多少条就算庞大没有。没有啊,因为这个看环境,有的时候数据量是很大,但是人家设备牛啊。对吧,有的时候数据量不是那么大,但设备差呀,那这个数据量我们没法说,这个得看客户的反应,客户说这个地方很慢啊,那你想办法对吧,想办法的第一条就是我们要填加索引,填加索引啊,数据量庞大,第二就是什么。就是我刚才所说的很少什么该字段很少的DML操作,诶,我们添加索引是给谁添上啊?是给某个字段添加注意啊,添加索引是给某一个字段或者说某些字段添加索引是给字段添加的啊,Select select,现在salary from EP where条件是这个e name等于史密斯注意当什么呀?当这个e name字段上没有添加索引的时候,注意听,当e name字段上没有添加索引的时候,以上S语句会进行全表扫描,全表扫描各位扫哪个字段,扫描e name字段中所有的值,明白吗?
10:57
那当e name字段上啊,这个字段上啊,添加索引的时候,以上搜后语句会根据什么索引扫描啊,会根据索引扫描快速定位,快速定位。
11:17
所以说第三条是什么?我问大家该字段经常出现在什么外耳子句中,假如说你这个字段压根就没有出现在wi后边,您根本没必要给他加缩引,因为我不会根据他去查。懂什么意思吧,那外name等于什么意思,就意味着我要根据什么查呀,我要根据这个e name,根据我员工的名字去查呀。能理解吧,就是我现在呢,我一边去给大家说这个索引啊,我一边就告诉你什么时候给字段添加索引,至于创建索引的搜索语句太简单了,不值得一提呀,一会儿咱们可以简单看一下,创建索引很简单。
12:03
最难的是哪?是索引的底层实现原理。这点我还没有讲到对不对,那现在我们就考虑,就是我们什么时候给他加索引啊,哎,你得把这几个条件记住啊,一数据量庞大,但这个是根据客户的需求啊,这是根据客户的需求啊,根据线上的什么环境啊来确定的,第二个呢,就是该字段呢,很少的DML操作啊,因为什么,因为字段进行修改操作,行修改操作,所以也需要维护啊,也需要相应的维护,需要维护啊,反而可能效率就会就会降低啊,那该字段今天出现的Y词句中,就是根据经常根据哪个字段查吧,诶对经常根据哪个字段查询,这个你也得考虑,但凡是说以后你们在开放的时候遇到的情况就是第一数据量大什么意思,客户反映这个地方很慢,而且经常的这个这个这个就是说一般情况就是查这个字段,这个字段。
13:08
经常出现在外,后边你这个时候就要考虑加索引了啊,就要考虑加索引了,加不加差的很大啊,就像我们以前的项,我们都不加,三四分钟点完,客户在那等就硬等生生等了三四分钟,结果下边E出来个表格查出来了,因为数据量太大了。嗯,国家电网的数据太大了。他需要从库里边检索,老半天才能检索出来,但是加了索引之后,一秒两秒,咦呀,你明白吗?这这客户就感觉啊是吧,这一下就满意了啊,就特别满意,就特别满意,对觉得咱们技术可牛了啊,其实也就那回事啊,来注意啊,注意一件事儿,主键和具有unique约束的字段自动会添加索引,就主键和具有unique约束的字段会自动添索引,各位这个不需要你手动加啊,都是自动加上去的,就如果说这个字段上有有有这个unique约束,或者说这个字段是一个主键,它会自动加,所以说根据什么,根据主键查询效率较高。
14:20
尽量根据主见啊检索。尽量根据逐渐检索。好了。我们来看一个语句,各位啊。柚子一下,呃,接下来我们select语句啊。Select name吧,From where,条件呢,随便写一个啊,条件大于。或者等于吧,5000。
15:02
有这个数据吧。那这条语句它有没有使用索引呢?Salary字段上有加索引吗?没有是吧?可以用这个命令啊,叫explain啊,可以用这个命令来看看这条SQL语句,它有它的执行情况。叫执行计划,明白吧,叫EXEX叫XQ的执行计划,执行计划我们来查一下这个啊,这个单词执行计划来我们看一看啊,呃,你重点看哪个。哦,什么意思?全表扫描。看见了吗?全表扫描啊。扫了多少条记录,14条记录啊,Using where对不对?哎,全面扫描。查看SQL语句的执行计划啊,可以通过这个explain的命令来查看,只有买SQ中才有啊,别的数据库没有。
16:12
后面跟上最后语句这个tapo呢,你可以很清楚的看到它是它是全面扫吧,全面扫描啊,那那那我们现在能不能给这个给这个薪资这个字段添加一个索引呢。来我我我们我们给啊,我们给谁呢?我们给这个薪资salary这个字段啊,添加索引啊,添加索引怎么加索引呢。嗯,什么。Index。我们就叫emp吧,下游件,下游件是你代能看懂吗?就创建一个索引,叫EP,下下index。On on什么呀?E括号谁?诶,能看懂吗?这啥意思啊,在什么什么上?
17:03
在E的表的哪个字段上,字段上干啥?创建一个索引对不对?来我们建个索引出来啊,好各位索引就有了。目录生成了啊,你懂什么意思吧?这本书的目录生成了,接下来我们再去执行这个计划来,好,我问有没有根据公司去查。这不根据工资,工资上有没有索引,现在有好回车。好,大家看不不一样了啊,不一样了,最最起码你看到这个位置。这个位置它不再是奥了,而且他扫描的记录条数,一个他只扫了,一个他只扫了一次,连两条记录他都没扫到。对,那如果说你这张表有上千万条记录,那同样我可能就扫一行记录就扫到了,那永彤老师他底层用的什么数据结构B。
18:05
对,Be。啊,这是一种数据结构,各位啊,这种数据结构,就这种数据结构呢,它的检索效率非常高啊,它遵循左小右大的原则,左小右大的原则。你们学过啊,那个吹。吹map吧,诶你们吹map学过吧?啊map往这个map集合里边这个K部分添加这个元素的时候。这个这个添加这些元素的时候,这个元素是。遵循左小右大的原则,采用中续,前续还是后续便利啊。中旭是怎么个便利法?左跟右吧。
19:02
中序不就是跟在中间吗,是不是啊。来,我们接着看这个啊,看这个。把这个拿过来,我们给这个工资,Salary这个字段,EP这个表,Salary这个字段,添加上这个索引之后呢,我们就再去查看它的执行计划之后呢,我们发现它扫描的这个数据啊变少了啊变少了。使用了索引,使用了索引各位啊,那么怎么创建索引对象这块会了吗?Create index后面加什么索引名称呗,然后on呗,表名,括号字段名。那删除索引呢?你猜也能猜出来啊,创建索引对象,删除索引对象drop index,哎,如果我们把这个索引现在删掉,它还能用吗?就drop index呗,叫什么叫emmp,下键下键index呗。
20:31
后边有个on啊各位。后边有个啊,我这掉了一个啊啊后边跟什么点名啊就行了,这东西你记不住啊,你记不住,我都记不住,东西太多了,根本记住啊,来招品所有名称on后边跟表名,但是我说一下啊,有没有装Oracle数据库的。如果有装Oracle数据库的同学,你试一下这个,这个肯定100%能用啊,Drop品next不用跟表格,直接就是索引名称就能删,能删啊,但如果是买SQ这块,你看他还得需要一个什么呀啊表明那行删了啊,删了之后我再去看看这个执行计划,好大家看现在它是不是就采用all了,扫描的类型采用O了啊,采用。
21:18
呃,删除索引对象,创建索引对象啊,然后什么时候考虑给字段添加索引,这个大家都了解一下,然后接下来我们尝试来理解一下索引的实验原理,各位啊,索引底层采用的数据结构啊,是这个。啊。知道这个数据结构的名字啊,知道这个数据结构的名字,接下来呢,我们看一下这个就是索引的一个。实现原理各位啊,这个内容我们尽可能去理解啊,尽可能去理解,这个比较深奥,比较深奥对。
22:11
来我们啊。先准备准备数据啊呃,Select。嗯,我们就以以内为为例啊,以内。想想啊。嗯,这个够了啊,来S。我先把这个数据查出来啊。查出来之后呢,我给你画个图啊,画图这块呢。你就你就理解啊,有这么一张表。这张表叫什么叫ERP表啊,延P表。有这么一张表啊。呃,不用排序,不用排序啊。
23:03
现在数据库当中有这么一个数据,有这些数据之后呢,这条SQL语句是这样写的,各位他怎么写啊,Select,然后e name吧,就e name啊,From EP,条件是e name等于什么呢?呃,叫做史密斯。就有这么一条蛇。当这个字段上啊,我先说第一种情况,就是当什么当e name这个字段上没有索引的时候,会进行什么全表扫描,这个大家已经看见了啊,全部扫描效率较低吧,效率较低啊,那给什么E内字段添加索引,怎么加索引?Create index下先下先index on。好,大家看这个语句写完之后。这是给这个叫EP表的E这个字段是不是天索引啊,只要您的这一句话一执行,各位啊,我大概说一下这个原理啊,来这个只要这这一句话在这一直行妥了您的这个。
24:15
数据库当中。有可能在内存,也有可能在硬盘文件当中会生成一个什么,所以。那雨桐老师,那到底是在内存还是在硬盘文件,那要看你的存储引擎。因为我们今天上午不是说了吗,如果你是memory的那种存储引擎的话,你这个索引啊和数据都是存储在这个内存当中的,对吧?那如果是别的这个存储引擎的话,你的数据啊,有可能是存在一个文件当中,比如说MY这个存储引擎。他这个索引就是存在一个什么什么什么什么myi myi的文件当中吧。
25:01
是不是,哎,咱们先不管这个啊,总之呢,我通过我的这行代码。我给这张表的这个字段创建了一个索引。啊来,我简单画一下啊,通过这条语句啊,通这条语句。然后诶索引。出来了,嗯。这个索引长什么样儿呢?首先。它会对你这个记录进行排序索引啊,会对你的记录进行排序,Select from order。我只说这种字符方式不是数字啊,不是数字来,接下来呢,在我们的内存也好,或者说硬盘也好,总之它会生成一个什么。
26:02
所以。各位啊,这个呢,就是索引。这个是e name index对象。对象啊,所以对象。索引会自动排序,这要注意。会自动排序的。然后接下来呢,你要知道啊。我给这个表的这个字段添加了索引之后,在另外的一个位置,这个位置有可能是硬盘文件可能啊,可能是硬盘文件可能是什么呀,内存。
27:00
啊。诶,生成了这么一个所谓的索引对象,然后接下来呢,这个索引呢,它会分区各位啊,它会分区,比如说这是什么区。这个我们叫做M区。M区啊,然后呢,下边这个呢,就是什么呀,就是S区。按首字母来。S区下的第二个字母,它还会继续分区。明白吧,啊,这个我就不再说了,它分完区之后把这些数据拆分开存储到B上。至于B税这个这个数据结果就先不用管它,先不用管它,你就这样大概去理解一下啊,理解一下咱们不是搞学术性研究各位啊,这块呢,我们大概说一下,这叫S区。
28:08
那么它分好区,也就是说有A区,B区,C区,D区,E区,M区,S区是吧,哎,有,那么接下来我们呢,就执行什么语句在这select,什么en name from e形是en name等于什么什么意思明白,那么接下来是怎么做的,各位注意听了啊,首先。条件是什么?E name字段,这个时候会查看e name字段有没有对应的什么索引,结果找到了e name字段对应的字段啊,对应的索引对象是谁?P下线一下。
29:00
明白吧?那找到这个对象之后呢,结果找到了这个对象。然后怎么着,通过索引检索吧,是不是哎。怎么检索的?首先E等于什么什么意思啊,先定位到哪S区。明白。就它是一个数啊,明白吧,先定位到S区,S区定位到之后继续定位什么M区。就是它有可能会根据第一个字母啊,有可能会。S区你定位到之后,你这个S很多呀。对吧,那我需不需要通过第二个字母进行进行进行定位啊,也需要啊,先定位继续定位M区,哎,很快就是缩短了什么扫描的什么数量是吧,很快定位到谁了,史密斯了。
30:13
那定史密斯咋是吧?注意了各位,你的数据库表当中的任何一行记录,它都会有一个物理地址。数据库表当中的任何一行记录,它都会有一个物理地址。这个物理地址啊,云涛老师,这个物理物理地址是什么?这个物理地址是硬盘编号。就是你这个数据有你这个king啊,它在硬盘上也会有一个硬盘编号,有个物理编号啊,有物理地址,下面的这个叫做福特的,他也会有这一行记不是这个数据各位,是您表中的一行记录,也就是说除了e name之外,有没有EP number,员工编号有没有这个,呃,薪资内行记录的物理编号,听懂了吗?这物理地址啊,这个物理地址呢,可能是。
31:23
0X1。这个物理地址可能是0X2,这个物理地址是0X3,可能是这样的啊,我就随便写的,那么接下来呢,你这个数据过去的时候,它会携带什么。会把物理编号携带过去,这个物理编号在Oracle标注ID啊,注意,物理地址在Oracle数据库中叫roll ID,在Oracle中叫做row ID。在买色库里边没有一个名字啊,就叫啥物理地址啊,就叫物理地址这个事呢,我先提前给你打个招呼,因为你有一天你会看那个Oracle的一个一个一个视频啊,你看一看它里边会有个柔ID啊D。
32:08
那。当你创建好索引的时候,他会把这个物理地址携带过去,他这是不是排序了史密斯,对的是0X3对吧?所以这个时候呢,他这个史密斯呢,这个史密斯啊,会把这个物理地值也怎么着,0X3会带过去,听懂了吗?接下来马上它定位到史密斯了,对不对?史密斯后边有没有物理地址,所以接下来这条SQL语句就会变形。这一条注意看注意看啊,就是这条色扣。变身了。这个啊,就上面这个色扣。变身成什么样的circle呢?Select,什么from e where条件是什么?物理地址等于什么0X3。
33:12
别睡啊,虽然很枯燥,讲理论就是这样。你的这一条SQL语句。由于你e name字段上有索引,它不再根据这个表查询,它根据索引检索,那索引呢这块呢,又对我们所有的数据进行了排序,放到了btra当中,然后接下来它分M区,S区,然后接下来呢,E name等于史密斯的时候,他就会查,哦,E name上有一个索引,于是乎呢,他就定位到这个索引对象上了,然后接下来在这个索引对象上找S区,找到S居之,快速定位到史密斯,史密斯定位到之后呢,史密斯后面有个物理地址是0X3,而这个0X3拿到之后呢,马上把这条S语句换成了这个s select内from物理地址0X3,记住了,这条S语句非常重要,这条S口语句它不再走表,这一条S口L语句不走表的各位是直接通过物理地址定位的,硬盘上的数据。
34:13
听懂了吗?也就是说它缩短了扫描的范围。在这里有一个很重要的概念,叫物理地址,或者是物理位置在硬盘上真实存储的一个编号,它是这样做的。所以这样的话,他从头到尾就缩小了,扫描换不需要再干什么呀。他不需要再整张表全部扫描啊。他扫描部分记录啊。对吧。那有的老师他为什么用树啊,为什么用B啊,为什么用树啊。树这个东西有一个根,根分两个枝,对吧,两个枝左小右大。有没有顺序啊。他找到这个节点之后,往左子树上找,还是往右子树上找?
35:05
那就要看你这个数据实际情况是怎样的。是这意思吧,哎,所以他通过这种二分查找,也是也算是说二分查找的一种方式,可以快速省略到我不查你别的元素嘛,对不对,我缩缩小了我的扫描,我可能比如说1000万条记录,我可能只需要扫1000条记录就够了。明白什么意思吧,所以说你这个就有的时候一点都不夸张啊,就是我们这个没有加索引的时候啊,这个点完之后,确实客户能会等等,最起码等个七八秒十来秒,那你说你用一个系统,咱们这么说,咱们现在打开这个百度首页,如果五秒钟之内没出来,我现在就想关了它,对不对。是吧,哎,那就是这样嘛,那如果客户用这个系统,你说他花了300万是吧,给咱们软件公司做了,做完之后呢,我们这个项目一上线,客户一点在那等着,过过一分钟数据出来了,他能满意吗?肯定不行,那这个时候呢,我们索引这块啊,我来说一下他有。
36:07
它就能起到作用。但它不是万能的,不是万能的啊,有的时候加了索引好损。不好说。你会看到这个效率的提升不是很明显,但有的时候会提升很明显啊,环境因素,线上的环境是很复杂的。你客户的并发量很大,你再有索引咋的,对吧,你并发量大呀,是不是,那到那个时候怎么办呀。就各种办法想呗,索引是一方面,第二方面,你Java程序写的这个需不需要优化,你SQL语句写的需不需要优化,是不是再说了。硬件。是不是,哎,我们硬件环境需不需要再升级,对不对,我们这个需不需要搭一下集群,一个机器是不是不够多搭几个机器。对吧,这几个机器都做服务器,数据库服务器,我们是应该多搭点,就类似的,我们可以可能需要考虑的东西就比较多了,就所以呢,只是其中一点就是我希望你以后呢,就是遇到效率问题之后啊,尤其是查询底层,你点完按钮,底层是在检索查数据的话,如果效率比较低的话,你尽可能能想到曾经接触过一个东西叫索引。
37:21
那至于创建索引的语句简单吗?创建索引的语句就这个呀,就很简单,删除索引也很也很简单。对吧,就这一句话,他就能在底层给你生成一个数。多划算是不是?哎,什么意思?就是比较难的算法,人家数据库是不是都已经实现了,你需要做的可能就是这么一条语句创建一下。另外,你需要做的是,我这个时候应不应该创建索引,你的依靠是这三个条件,一、数据量大不大,二、是不是经常改。
38:00
第三,是不是经常在where里边出现,你要是满足这几个条件,你再考虑添加索引啊,你不满足这几个条件,你加索引是没有任何用处的。啊,另外执行计划呢,这个呢,有一点印象,可以看看这个SQL语句,它的这个有没有使用这个索引的方式去检索啊。这个实验原理可以简单总结一下,各位怎么实现呢?通过btra缩小扫描范围。各位。底层底索引进行了什么排序分区啊排序分区。所以会携带谁?数据在表中的什么物理地址,最终通过索引检索到数据之后。
39:02
检索到数据之后啊。获得获取到关联的什么物理地址吧。啊,通过物理地址定位表中的数据啊,效率是最高的,通过物理地址啊,也就是select e name from where,条件是e name等于我们说的所说的史密斯,然后会转换为通过索引啊,通过索引转换为select e name from wherere,条件是物理地址等于0X3啊大概是这个意思。是这样做的,行,这个所有的实践原理呢,咱们咱们的大家啊,大概的了解一下啊,了解一下这个东西,就是说他将来可能面试官可能会问你啊,就是说这个。
40:01
所以,所以这个实验原理能简单描述一下吗?对吧,你就可以把今天呢,我说的这个东西呢,哎,粗枝大叶的方式啊。把它描述一下,大概描述一下啊,你不能说你这个一说索引时间原理是啥不知道,那你肯定不能这样说啊,肯定不能这样说来这块呢,咱们存一下啊。是这吧,好,这个关闭。另外呢,我们要看一看啊。继续往下看,索引呢,分类也了解一下。单一索引。复合索引、主键索引。唯一索引,知道这几个名字,各位如果我给什么单个字段添加什么,所以。
41:12
复合索引就是几个字段联合起来添加,添加一个索引,索引也是几个,也是一个,只不过这次是什么。多个字段联合。可以的啊,给多个字段联合起来添加几个,一个索引,主键索引,就是主键上会自动添加什么索引,唯一索引就是有什么有unique约束的字段上会自动添加什么,所以呢,根据微信查。根据这个主见,查效率最高,为什么?因为他永远扫的都是几条记录。一条一条一条就定位到一条定单啊,上千万条就一条定位到,就这意思啊,所以呢,分类,那再往下我觉得也可以聊一聊,所以什么时候失效就是,所以这个东西也不是万能的,你比如说这样做啊,这样做肯定会失效,Select from,什么emp条件是like摆分号。
42:22
A,百分号这个会让索引失效,尴尬了一内妥了,他不会走索引,原因是他根本就不知道第一个字母是谁。他定位不到是哪个区。这种情况下,就算您这个e name字段上加了索引,对不起,我仍然做全面扫描,这就是模糊查询,这种东西也不能随便用,所以你用这个东西就会降低你的效率。降低效率。你有这么一个印象啊,所以什么时候失效,就是模糊查询,模糊查询的时候,第一个字符使用第一个通配符吧,使用的是百分号,这个时候索引是失效的。
43:12
他不会根据索引检索,会进行全面扫描。你记这一个就行啊,还有没有别的呀,有有啊,但不用记那么多,不用记那么多,到时候有话说就行,有话说就行啊,就是所有这个东西,它其实也不是说万能的,有的时候我们家族也会失效,对吧,你们模糊查询第一个用百分号就会失效。所以呢,一般情况下,我们模糊查询就是尽量第一个不要写什么百分号。尽量不要,只能说尽量不要写,那有的时候人家这个需求就是说我就要查一查名字里边有,名字里边有你懂,名字里面有O的,名字当中有M的。理解吧,哎,都人家说第二个字母什么什么是吧,或者说第一个字母是什么么?或者我们要找出姓张的,那你那你就不能写,不能写百分号张百分号啊,懂什么意思吧?哎,你第一个字母写上张,然后后边写百分号它会走,所以。
44:12
会做作业。好了,那这个呢,是关于咱们的一个索引这块的东西,各位啊。咱们这个索引就说这么多了啊,就是这边的一个问题呢,就是面试官经常问的啊,我提一下提一嘴,第一。他会问你索引的实验原理,第二,他会问你什么时候你加索引了。你给我说一下,你做这个项目什么时候加索引了,在哪加的?当时的业务背景是什么?你遇到什么困难?你为啥要加?就这个你你这个面试官,他他最后一般面试你的时候,他一般问就是问你项目啊。他就是问你项目。你知道面试官问的最常见的一个问题是什么问题吗?最常见问题就是你到底干啥了?
45:02
所有的面试啊,就是问项目这块的话,就是他首先第一个开门见山的,就是你说一下这个项目吧,你都干啥了。这个问题必问。百分百。对,然后你接下来你就说我这个项目有什么模块,什么模块,什么模块,我们这个项目啊,这个我负责的是哪一块,我当时负责这一块的时候,我用了哪些技术啊,当时我在做这个东西的时候,我遇到了哪些困难啊,这个困难我们是如何如何解决的,就类似的一些问题你都得回答。啊,那你就说问索引的话怎么办啊,他就问你,诶你项目中哪块用索引了,他就问你直接问你就不是说你平时在写的时候啊,索引怎么怎么着,他就问你,你项目里边哪块用了,你给我说一下你为啥要用。当时的业务背景是是怎么回事,你就想起来用索引了。对,用了索引之后,你们这个项目有没有有没有什么效率提升,你给我描述描述。对吧,那通过这一两个问题,我就知道你到底有没有开发过。
46:05
对吧,哎,所以说后边这个项目您要做的话,扎扎实实的一步步做的话,您不可能不会说。就项目的功能,你不能光上课听啊,上课听一下子哦,功能实现的挺开心,你下课得写这个代码,必须是您亲手实现的,将来在面试的时候您才敢说你这个项目确实是你做的,这个代码是你码出来的,你用了哪些技术是哎,你解决了哪些模块的哪些问题,对吧?你比如说咱们这个动力点,在最后那个阶段的时候,我们有一个功能叫秒杀。对吧,秒杀实际上是高并发吧。是不是高并发,高并发呀,就是很多人同时抢抢库存当中的那两件或者三件商品嘛,不就是这样秒杀他就把那个12306并票呢,是吧,多线成并发嘛,去去对这块的东西其实比较难的啊,比较难的这块秒杀的功能实现,这不是一个知识点,这是一种编程思想的一种体现,怎么进行流量消峰是吧,这个并发量特别大的话,怎么消峰,用什么技术。
47:11
对吧,你这块你必须得亲手做出来,将来出去面试的时候才能说出来啊,行了,所以咱们就说这么多啊。
我来说两句