马士兵 MCA 架构师课程笔记(八十六)

系列 6:P82:深入剖析MySQLl背后的架构设计,带你充分了解MySQL的架构设计 - 马士兵学堂 - BV1RY4y1Q7DL

这个东西啊,我先说一下,你连了它之后,对你对于mysql的调优也好,还是对mysql的深入理解也好,都是有帮助的好吧,那我们在划分的时候,基本上会发划分为三个层次,第一个层次我们经常称之为叫客户端。

客户端,什么叫客户端,就比如说我们自己写的代码,像jd b c的对吧,比如说你们自己之前用过的一些工具来vc对吧,再比如说用的sql这些东西全部都属于客户端,客户端它存在的意义和价值是什么,注意的。

只是为了提交sql语句,就建立连接,提交搜索,明白意思吧,把这件事你要先搞明白了,叫建立连接,提交sql第一个步骤,当客户端完了之后,客户端是向谁发起连接,并且建立连接呢。

在下面第二部分包含了第二个组件,叫做server,server是什么意思,指的是mysql的服务,这东西啊怎么去理解它,很明显,假如说你想运行你当前的mysql的话。

那么意味着你必须要先开启mysql的服务吧,只要打开你的电脑里面一定有一个mysql 5。7,显示的是正在运行,它表示的是mysql在运行的这个进程,运行的进程,如果你想正确的正常的连接单词口。

这东西必须要有的,如果你在linux服务器里面,比如service mysql is start,它也属于启动mysql的服务服务,必须要正常,大家看到了,我在服务端这块我画了很大很大的一个框。

为什么很大原因很简单,这里面其实也包含了非常非常多的组件,好什么组件,第一部分听好了,第一部分叫做连接器,这个连接器代表什么意思,就其中一个组件一个部分好吧,它主要承担的功能也非常简单,叫做管理连接。

管理连接,第二个要验证权限,每次在进行数据库的访问的时候,必然是不是需要输入用户名和密码,它会进行权限的一个验证之类的啊,这是这块的一个基本操作,而且我们是可以查看我们msl对应链接的。

我问一下有多少同学之前查看过msl的连接。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

看过吗,有一个很简单的命令啊,我们来看看。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

比如说我这先登录nsgo杠u root杠p,123456进来写个东西叫show process died。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

这就表示我们当前数据库里面正在建立的连接。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

有几个,有两个正在访问我们当前的一个数据库,叫connect to master,还有一个starting对吧,只是我们对应的一些连接操作。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

你知道这玩意就可以了,就这一个连接器,我们一般很少关注于这个模块,我是第一部分,第一部分连接器,当我连接成功建立之后,第二个步骤叫什么叫分析器,这个分析器是个什么玩意儿呢,什么叫分析器啊。

其实非常简单诶,这分析非常简单,其实大家注意了什么叫分析器,我们的sql语句,最终是要提交给mysql server来开始执行的,但是sql语句是个啥呀,其实在我本人看来,你写的一个sql语句。

比如最简单的select行from table,这个就足够简单吧,你在公司里面也可能写一个上百行的sql语句,它可能会变得非常非常复杂,但不管是简单还是复杂,你都要搞明白一件事。

他说白了就是一堆的字符串,而我的server拿到这一系列字符串之后,我是需要对当前的字符串进行,某些简单的解析操作的,有些同学应该听过一个名词,我不知道有没有听过啊,叫a s t,有听过吗。

什么叫a s p,它的全称叫做抽象,民法术最终一个简单的sql语句,不管多简单都死完,sql语句都会转变成一个树形的结构,有人见过这个抽象语法树长什么样子吗,见过的扣一,没见过的扣二见过吗,好吧。

有同学没见过,今天我来带你看一下,其实啊树长什么样子,它又长什么样子,这东西啊,你善于去看官网,我要打开一个官网,有一个组件叫3d sphere,它是一个分库分表的一个组件,在当前这个组件的官网里面。

他给我们展示了一张图,图里面展示的就是抽象语法树这样的一个结构,比如说不管你的语句,sql语句什么样子,他都会帮我们进行一个转换,这么慢吗,来中文这个网站,有中文网站拿过来之后可以直接进行查看的。

什么情况能这么慢,4。2s,咦,这咋了,是我网络的问题吗,来打开concept,这太慢了,4。一点,可能因为我同时开了两个直播间,所有点有点卡,哎呀这看不了贴子,重新连接一下,我搭完梯子之后。

你们这个客户端听课这东西就断掉了啊,什么情况,这是,算了有点慢,咱慢慢开着吧,慢慢慢开着,看完之后我们再说,这不是公司网速的问题啊,老师笔记本什么配置,我怕说出来吓死你好吧,懂了吗,一会儿带你看。

然后慢慢打开的,那这里面会进行两个最基本的操作,一个叫词法分析,你的语法分析,但不管你怎么进行司法分析还是进语法分析,最终会转换成一个抽象语法树,而我们sql语句在进行正常执行的时候。

都是按照这样的一个树形结构来执行的,有很多同学可能会对这个呃分析这个工具啊,或者分析这个插件有感有比较感兴趣,我再给大家说一下,一般情况下sql语句进行语法解析的时候,重点或者用比较多的有两个组件。

第一个组件叫a n t l2 ,这第一个第二个是阿帕奇的,这东西我也不知道怎么读好吧,我就不给大家读了,这样东西用的是比较多的,如果谁不清楚的话,也很简单,你可以百度搜一下a n t l2 。

想了解的可以详细了解下,就告诉你了,说这东西是可以根据输入自动生成语法数,并可视化的显示出来的,开源语法分析器,这是第一个好,除他之外,还有第二个叫阿帕奇,这东西它也是一个开源的sql解析工具。

可以将各种sql语句解析成抽象语法树,明白意思吧,就这玩意的玩意儿,如果你在公司里面需要去开发,或者说需要去自研,我自研一些呃sql语句的一些中间件的话,这个时候可能会涉及到sql的语法解析工作。

如果不需要的话,那这块是没是没必要了解的,可以不了解哈,好吧,来找一下shing costc,官网又变了,这这盖子都宽敞,内核内核的一个引导,这边有个pass engine叫解析引擎。

在当前解析引擎里面有这样一个东西,来看好了出来了啊,晚上看这个词组语句,没有人不熟吧,select id name from the user。

where this is等于active and h大于18,我们从这里面能够发出什么信息,像这里面的send from wand,这些东西是不是都是我们对应的关键字。

但是像id name table名称加上我们的字段,加上我们对应的一个值,这些东西都是可变的吧,所以它会把你当前的这个思思路语句,转成一个这样的树形结构,整成这样数据结构,看到了吗。

最上面是root节点,下面绿色的表示我们对应的关键字,这里面叫做token标识token,然后用film属性有id和name好吧,有tables告诉你,t user clinicians有条件。

首先里面有and等于大于,这都是我们的token关键字,下面是我们具体的一些变量值,它都会填充到这个地方,所以不管你写的sql语句,都会转成这样一个数据结构,按照这样的一个数形结构来进行。

具体sl的解析工作,来这个东西了解的话,给老师扣个一,看到了吧,就这样子好吧,就这样子,当然你不需要不需要详细去了解,这个过程没意义是吧。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

小子你说这是录播吗,对是录播,你是回答非常正确啊,好了,这是第二部分核心的一个组件,讲个色儿吧,我加了色,总感觉很丑的样子,填完色之后效果立马就不一样了,好吧,ok这是第二部分。

然后呢第三部分除了分析器之外,下面还有一个东西叫什么呢,叫做优化系,优化器优化是什么意思,我们经常说我要进行sql语句的调用了,其实在mysql内部里面,他已经要进行相关的一些优化调整了,刘老师。

这需要进行什么优化调整吗,比如说我举个例子吧,我们经常写一个sql语句,叫flat行plt 1,然后撞1t2 t一点id是等于t2。2i d,我问一下,对于这样的一个sql语句,它是先读取t一这张表。

还是先读取t2 这张表,现在去哪个,你知道吗,这个时候一定有人会告诉老师先读取驱动表,然后再读取另外一张表,你告诉我什么叫驱动表,他每次一定是都先读t1 ,或者都先读t2 吗,不是吧,对不对。

这是不一定的,所以对于先读t一还是先从t2 ,这个时候就是由我们对应的一个优化器来选择,执行的优化,选择执行,而优化器跟大家说一下,优化器在进行优化的时候,主要依据于两个标准,第一个标准叫r b o。

第二个第二名叫c b o,什么叫r b o,所谓的r b o表示叫基于规则的优化,cpu要基于成本的优化,在现在的主流数据库里面,像这个cpu用的是比较多的,r b o用的是比较少的,但是你不要说老师。

你能给我说一下,具体的优化器有哪些优化规则吗,如果你想看优化规则,不好意思,需要看源码这块,我也没有怎么看过,我虽然没看过mysql关于优化数方面的一个解释,但是我看过一个框架叫做have,你知道吗。

你知道这玩意儿吗,还有你知道这这这个东西吗,have数仓零税仓库哇,新仓库里面在进行色度解析的时候,它也需要一个优化器,在have里面我看过have源码,看源码里面我那是二点,不是1。1。2版本,1。

1。2版本,在这个版本的时候,它里面大概包含了134个优化器,134个,就根据你不同的sql语句的情况,来判断说我到底使用什么样的一个优化规则,是这样的方式,而mysql里面有多少个,我具体我也不确定。

因为mysql源码是用c语言写的,我看c语言虽然能看,但有点困难,所以这块了解比较少,所以你大概知两个东西就可以了,如果你想详细看的话,这东西也是有地方可以查的,你就搜一个东西叫msl cpu就够了。

看到了吗,mac p u的什么体系,什么之类的,sql优化器,cpu和r b o分别代表什么意思,里面有一堆的体系工作啊,c p u那是cost r b o,找数基于规则的优化器。

和基于代价或基于成本的优化器,就这意思好吧,我还以为是直播呢,不是直播,是录播好吧,r b o基本团队现在主用的就是c p u,r b o现在几乎用的很少了,所以大概只有两个概念就够了,这是第三个组件。

包含三个组件之后,下面还有第四个组件叫什么,叫做执行性时间线,有什么有什么作用呢,它的意义在什么地方,其实也非常简单,它的作用是,执行sql跟执行sql,跟存储引擎,交互村长已经进行交互。

这句话什么意思呢,其实非常简单,朋友们,比如说我们现在换了客户端了,我们下面画了中间的server层,其实在这两层的下面还有一个层次,这个层次这是干嘛的呢,我们叫做存储引擎好吧,什么叫存储引擎。

就是你们之前说的一些东西,像my sum对吧,像in n d b对吧,像memory,对吧,这三东西都是指我们存储引擎,那最终我们的直线器是需要跟我们的存储引擎,进行交互的。

它需要从存储引擎里面把数据给查询出来,并且返回给我们具体的一个客户端,明白意思吧,来我画这张图能看明白,同学第20扣一自信点把吧,去掉这些东西好吧,当然很多同学啊一直对于存储引擎的概念。

可能理解的并不是特别清楚,我想问一下什么叫存储引擎,这东西到底怎么去理解它,谁能告诉我,我们怎么理解存储引擎,先问一下mysql的数据文件,存在磁盘,还存内存,知道吗,在我们看到文件的时候。

其实说白了它就是一个一个单独的数据文件,但是你注意了,你在换不同的存储引擎的时候,他们在磁盘上面的存储形式是不一样的,也就是说叫不同的数据文件,在磁盘的不同组织组织,形式好吧。

我们给他们起了一个统一的描述,或者统一的概述,叫做存储引擎,我举一个例子,你就明白了,很多同学可能经常看的是表,通过可视化工具直接看表了,你其实很少了解过这些对应的数据文件,那么在像这样的数据文件里面。

我们可以看一下,打开我电脑好,选择c盘,找到program date,找到mysql max,5。7找到date,我打开随便打开一个库,比如demo在这个库里面,或者在这个目录文件里面。

大家可以看到同名的文件,是不是有两个aa是同名文件,一个是farm,一个是ibd f rm表示什么意思,它表示存储的是表结构相关的一些原数据信息,而a b d表示什么意思,它表示存放的是我们的数据文件。

以及对应的索引文件,所以当你看到这样的一些东西的时候,就表示说当前aa这张表,我所使用的存储引擎用的是什么叫in low db,这种存储引擎,明白意思吧好吧,同样的我可以换另外的一个目录。

比如打开nsl这个目录,这个时候你同样看同名的文件包含几个三个嘛,好吧,后缀名名名称不一样,f2 m还是表示我们对应的表结构,而m y d表示是my sum的date文件date。

而m yi表示所属的是masm的index文件,他看到了在inno bb存储引擎里面,数据跟索引是放在一块的,而在我们当前的这个呃,怎么说这个masm里面,你的数据文件和所有文件就是分开存储的。

这是他们区别的,比如说你在使用不同存储引擎的时候,他们在磁盘里面实际存储的时候是不一样的,虽然都是以文件的方式来进行存储,但是不好意思,他们是不一样的,明白意思吧,来刚刚讲的东西。

能听懂的同学给老师扣一,哇这是整个体系的一个架构,当然有很多同学可能还会知道一个东西,说老师mysql里面不是还应该包含另外一个组件吗,什么组件在这块,这里面是不是还包含另外一个东西,叫做查询缓存啊。

什么叫查询缓存,这东西怎么去理解,非常简单的,比如说我从数据库里面查到一批数据,查完之后,我下次有可能还会再次查询,那这个事儿,我是如果能够在缓存里面放好数据的话,直接从缓存里面取就行了,是不是意思。

注意啊,这我说明一件事,在以前的版本的时候,mysgo确实有这样的一个查询缓存,这样的一个组件,但是注意了,八点以上版本,取消,所以这就没换了,为什么,因为它的数据命中率非常非常低。

好需要经常的更新里面的数据,所以这个东西被删掉了,直接给干掉了,所以大家也现在不需要去记这么个玩意儿,你大概了解有这个东西就可以了,好吧,旭东说,老师你画出了什么笔记,叫分页用笔记。

那个process on给大家说一下,之前我也用process on,但那个如果你不注册会员的话,只能画几张图片,有些东西叫分页用笔记,你可以用一下,这东西跟ptdown是一样的。

它里面也支持在线买一个客户端,你可以在里面画图,跟pton几乎一模一样,可以拿它来进行一个画图,好吧,是这样的东西啊,这个小工具你们可以用它不限制图片的个数。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

不限制图片的个数,而且没有那种呃呃对应的一些充值的一些需要,这个没有啊,所以踏实的放开用就行了,ok好了,就刚刚我讲的一些mysql整体的一个架构,你把这东西首先要理解清楚了,当你把这东西理解清楚之后。

它有什么好处啊,好处就在于,我们可以在各个层次或在各个级别的时候,对mysql的一些东西进行举进行基本的了解,比如说同学们经常要在面试中,被问到优化的问题,当被问到优化问题的时候。

大部分同学会条件反射出来说,老师我要通过添加索引的方式来进行优化,那么我想问的时候,所以是怎么存储的,你不了解这样架构的时候,其实对于索引仪式很难理解的,再比如说刚刚我看到一个同学问我一个问题。

说老师方便的时候,一会儿讲了一个东西叫什么对,所以下推和索引覆盖它们两个之间的区别,那叫signal还叫什么,你叫signal吧,同学问的,所以下跌,所以我把那个索引覆盖的区别,你了解完这个架构之后。

你就会了解说什么叫覆盖,什么叫下推,好一会我都会讲,有这张图是一个预先了解的一个知识图,因为一会索引的时候,我们会用到对应的一个知识点,好吧,这是这些相关的东西啊,我是小白,不管你白不白。

系列 6:P83:MySQL的索引系统是如何设计的,为什么要使用B+树 - 马士兵学堂 - BV1RY4y1Q7DL

所以先把这个架构了解清楚了。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

当把这东西搞清楚之后,下面我们来聊第二个问题,说mysql的索引系统是如何设计的,为什么要使用b加数。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

下午的时候有一个同学在群里面也问到,这是逻辑架构吧,不会讲物理架构,不讲物理架构好吧,不讲物理架构,物理架构主要是它具体的一个搭建,比如分布式的时候,单机的要怎么搭建内容。

我想网盘里面就包含了这样的一些具体的组件,和完成具体的一个功能好吧,当你把这块东西搞明白之后,下面我们聊聊一下具体的索引,只要学的东西,我觉得所以他是一个老生常谈的一个话题了,基本上在面试过程中。

只要提到mysql,所以它会成为一个必备项,那么所以你们要考核的记录点其实非常非常多,就比如说我刚刚写的说,为什么要使用b加速这样的一个数据结构,当然很多同学可能在之前的时候,你看过一些帖子。

看过一些撕掉哦,你知道了他就要使用变压数,但我还是希望同学们能够系统地把它了解一下,那作为我们学习者,我应该怎么去学习,你可以来想一下,如果让你自己来设计一套mysql的索引系统,你会怎么来设计。

你要多几次这样的思考,你多这样思考之后,你后面看问题的角度是不同的,我来问一下吧,假如说让你自己来设计到索引系统,你会怎么来设计,告诉我你的思路是什么,你们咋设计啊,首先设计是什么,明确一件事啊。

所以你存在的意义是什么,你上来就用数据结构,你上来好好显明,你上来就说用数据结构树形结构是不对的,你刚开始不可能一口就想到这个地方,首先明确一件事,我在进行索引或添加索引的时候,你要考这件事。

索引的意义是什么,叫加快数据来加快,数据访问,对吧,哎房子提高查询项目,这都是我们随随便便说了两句话,那你要考虑一件事了,我们的数据最终存储在什么地方,刚刚我也问了,数据存储在磁盘,对不对。

但是你如果存在磁盘的话,你就要考虑一件事了,从磁盘里面读取数据,但效率是高还是低,比如内存和磁盘在进行数据交互的时候,它的效率是高还是低啊,对吧对吧,从c盘读取数据效率低,特别是你在读取大量数据的时候。

效率是不是依然很低,因为这些东西说白了它卡在瓶颈,是卡在软件层面吗,是平面,是卡在软件层面吗,不是这卡在硬件层面io,就我经常举个例子,我说同学们,如果你们买了新电脑之后,但凡家里有点条件。

是不是要把你的机械硬盘换成ssd固态硬盘,为什么速度快吗,是速度快了对吧,这是硬件方面的瓶颈,我们是没办法解决的,但是我在进行软件设计的时候,能不能在一定程度上对我们的ia操作,进行相关的优化。

可以在优化的时候,你是不是可以考虑两个层面,或者说两个维度,第一个维度我能不能去尽可能少的读取数据,也就是说减少i o亮可不可以,比如说本来我只需要实战数据,我需要实战,我就读十张,绝对不读11章。

可不可以,你多不同大小数据量,你的性能损耗一定是不一样的,对不对,第一个减少io量,除了减少io量之外,第二个能不能考虑一件事情,减少i o次数,什么叫减少io次数,你的数据是存储在磁盘的。

从磁盘里面读取数据的时候,是要涉及到词b的移动,或者说寻址的一个时间的,这都是太浪费时间的一个点,所以我能不能,如果说我能一次性读取来的数据,我就不要读两次,是这意思。

所以这是不是我们在进行软件设计的时候,会在进行一些基本操作的时候,我们应该尽可能考虑的一个点来,这些能听明白的,给老师扣个一,能听懂吗,好了,当你把这东西有了前提之后,下面我们就要开始进行思考了。

思考啥,所以要加快数据访问,同时要减少io量,减少io次数,那我要怎么去设计它,它存储io市场,io市场,input output,好吧,有时候我们要进行所有的设计来。

要考虑说我到底要怎么去存储我们数数据的,一个就是说哎和下面这些东西了解清楚后,我们要考虑,我们索引到底要存储什么样的数据文件吗,或者这样说索引,把数据格式是什么,什么叫数据格式。

比如说我应该用什么样的方式去存储,我们的索引,大家想一下,你的数据是放在一个非常非常大的文件里面的,在这个文件里面包含了一行一行的记录,不画了,可能有n多行,一行一行记录对吧,这么多行记录。

我如何去直接定位到我想要的数据,它在哪一个位置呢,并且如何能够把对应的数据位置给读取,得读取出来呢,那这时候我应该怎么考虑,比如说我应该选择什么的数据格式,来存储数据的,比如说一个表1000万。

我想读进六六百93条文要怎么存哈,希哈希能取吗,这样叫数据格式,大家想你们在创建索引的时候,是不是一定有一个k值,每次是不是根据那个k值,我找到了整行的value值,是这样做的。

所以我在实际的一个存储的时候,能做这样一个实现什么实现,我用kv格式的数据能不能完成这件事情,k是什么,k就是我们对应的字段信息对吧,那value是什么呢,value也非常简单。

我的数据是存储在文件里面的,我能不能指定好我具体在哪一个文件,有文件网名称以及还需要啥,别忘了你是需要读取我们对应数据文件的,你除了知道这个数据要放在哪个文件里面之外,还要知道什么。

磁盘地址我们换一个描述,天一亮,可以吧,纯纯说的我们能不能知道偏移量,当我知道我们对应的文件名称了,知道我的偏移量了,我是不是能把我们当前的数据给读取回来,与此同时,我还要还需要知道什么东西。

如果你想加的话,还需要知道读取的什么数据长度吧,当我明确好这些信息之后,我能不能把一条数据给定向的取回来,能还是不能,能同学们,如果我知道这样的信息,别自然信息就自带池,当我知道一个值之后。

我就可以定位到某某一个文件,然后定位到偏移量,定位到数据长度,我是不是就可以把整条数据给读回来了,好吧,但是我们之前说过了,mexico,他用的是b加数,而没有用这样的一种格式,为什么原因在什么地方。

他为什么不选择这样的结构呢,同学们,这样的方式会存在一个非常非常大的问题,是什么,当你的数据文件变得越来越大的时候,你当前存储索引的文件,有没有可能也会变得非常非常大,听描述啊。

当你的数据文件变得非常非常大的时候,你当前的索引文件,是不是有可能变得非常非常大,当你当前的索引文件也变得非常大的时候,那我是不是还有必要在索引文件的前面,我再给他建一个索引,我再给他建一个索引。

我再给建一个索引,这没有头了,这东西永远结束不了了,这明显是不合适的,对不对,所以这些东西它不适合什么意思,当数据原件变多,这时候索引文件也会变大,所以为什么会变大,大哥,你索引是字段的值。

你现在有原来是1000万条,1000万,现在变成一个亿了,你表里面的数据量增大了十倍,你所有的东西能不变吗,你所以不会跟着涨吗,这个green shadow绿眼混干面吗,当数据文件表多的时候。

表变多不是表多,变多的时候,你的所有文件也会与时俱进的跟着变大,那这样的话你当前你的数据结构就你这怎么说,但是将会变得越来越大,你在前面还要建索引,这很明显是不合适的,明白意思吧,原谅一个不是绿的吗。

是不是意思是就算你存一个指针也是一样的,你的所有文件是要一直与日俱增的,所以这种结构是不可以的吧,而且其实最关键的是是啥,你变大其实也没关系,也没关系,这里面涉及到一个核心概念或是两个东西。

我需要同学们了解一下第一个东西叫什么,叫o l a p,第二个东西,叫lol tp,我不知你的同学听过听过这样的东西,听过吗,听过的扣一,没听过的扣二,有没有听过这啥玩意儿,op叫联机。

分析处理l o l t名叫什么,叫连接事物,处理他们两个针对的应用场景是不一样的,像o r a p它有什么作用呢,它主要是对历史数据进行分析,产生决策影响啊,不要求短时间内返回结果。

而我们的联机事务处理是什么意思,叫支撑业务,系统的需要,需要在短时间内返回对应的数据结果,所以当我这个文件如果变大之后,注意了哈,无法在短时间之内返回我们对应的数据,所以它是会有问题的。

而第二个叫o r a p,它对应过来的应用场景是什么,有些东西叫数据仓库,而我们的连接事故处理,它对应过来是什么叫数据库,他们俩之间的一个区别,所以像我们讲的mexico它属于什么。

它属于关系型的数据库,然后刚刚说的have这玩意儿,它属于什么叫数据仓库,所以在ham里面,它确确实实的索引就是以这样的方式来存在的,但是没关系,我反正也不要求你,很快时间之内我返回对应的结果。

慢慢查了就行了,而mexico是没办法的,他必须要求在秒级别或者毫秒级别,给你返回对应的数据,所以这种写的时候他就不行了,能听懂吗,这些点能听明白的,给老师扣个一,能听懂,不,并不是说他不行他行。

只不过对于我们当前这种应用场景或这种需求,还用不到,或者没法用面试,既然是这样的方式不行的话,我们现在明确的说我要存储kv格式的数据,那我就要考虑下面一件事了,什么事存储k v格式的时候。

可以杠v格式数据的时候,需要使用什么数据结构,数据的存储形式我们确定下来了,那下面我们就要考虑对应的数据结构了,我问一下,你了解的有哪些数据结构,可以支持kv格式的数据存,储,哪些,换一个描述吧。

还细表好不好,传奇掉对吧,还有吗,能做到二叉树对吧,红黑树,对不对,看到吗,release你你mysql的索引用redis来实现,咋整啊,开头说的b数对吧,然后才知道b加数,我们都知道在最后环节的时候。

b加数胜出了,前面几个数都不行,下面我们来分析一下,为什么前面几个数它有问题或者他不行,你要把他们的原因搞清楚,为什么这些数据结构不行,为什么b加数就可以,其实通过上面的分析啊,通过这些分析的时候。

同学们能得到一个结论,什么结论,也就是说随着我们数据量的增长,你所有的数据量也是与日俱增的,也是与日俱增的,那同时你要考虑一件事,我有没有可能一口气把磁盘里面的,所有的数据文件。

全部都一口气读取到内存里面去听,有问题啊,随着你的数据量的增长,你的索引这数据量也在增长,我有没有可能把所有的书索引文件,一口气全部读取到内存里面,你懂了吗,不太可能对不对,或者没有可能对不对。

如果没有可能的话,基于这样的场景,我们要思考什么事情,如果我一口气读不下来,那我可以考虑怎么读,怎么读对,就是我想听你说,这东西分段也行,分块也行,叫分块,分块,读取,这也是mysql所有系统里面。

一个非常非常重要的东西,叫分块读取,分块读取,什么叫分块读取,这里面其实有一个设计思想,同学们听一下,叫孙而治之,很多大数据的设计里面都会用到这样的东西,叫分而治之,比如说我们在进行数据读取的时候。

也要保证它能够分块去读取数据,只要还能够分块读取了,那么你的效率是有可能会进行一个提升的,联合件提升的这东西我们形成一边,一会再详细聊分块这件事情,治疗综合这件事情,我们接下来解释这几个数据结构。

它到底有什么区别,以及为什么最终我们选择了b加数,这样数据结构,先看第一个哈希表哈,希表我们就不用我解释了哈,希表长什么样子啊,都知道吧,来画个图吧,来看看它里面长什么样子,上面是我们对应的一个数组吧。

下面是我们链表,然后这是有指针指向的,然后在输入里面我们可以写我们下标从零开始,1234567对吧,这里面可以存储我们具体的一个数据结果值,那这些东西搞清楚之后,我们先要思考一件事了,为什么哈希表不行。

或者说哈希表它到底存在什么样的一个问题,你把问题找到了,你才能定向的去解决我们这里面的一些疑惑啊,还有什么问题吗,有吧,第一个使用焊锡表,的意义是为了让数据尽可能尽可能的散列,因此在使用,哈希表的时候。

要选择合适的,什么叫哈希算法,避免哈希碰撞和哈希冲突吧,是不是意思,像我刚刚画了一张表,如果我这个都是一个完整的哈希表的话,你发现它的数据散列均匀吗,看数据产业就业吗,不均匀吧。

你看到了1号和3号里面有数据,但是024674567应该都没有数据,他浪费了很多的存储空间,是不是意思,而且如果你的数据都集中在,1号位和3号位置的话,链表它是需要按个遍历迭代的。

它的调音参数效率会降低好吧,所以这个哈希算法它是一个非常大的考验,这个其实还不是太重要的,最主要的一件事是什么,我问一下pc表在进行数据存储的时候,它里面的数据是有序的还是无序的,有序还是无序。

无序吧存储的数,有t吗,这同学是要点吗,还是表示这个同学还是表示有序的吗,无序啊哈希表存储的数据结构,它是无序的,当需要进行范围查询的时候怎么办,只能挨个进行便利,对比是效率极低,那这时候你想你工作中。

你工作中所对应的那个范围查询多吗,多吧是不是很多,如果你都是范围查询的话,你有话题表达行吗,不可以的不可以了好吧,还有第三个点是什么,对我问一下pc版在读取数据的时候,我能一块一块读吗。

他先表在读取数据的时候,我能一块一块去进行数据的读取吗,不能吧,这是不是也会存在对应的问题,是不是有病的问题,所以这些东西都不太适合我使用,我们的哈希表啊,但是我要说明的一件事是什么。

虽然说哈希表没有作为我们哈希索引的一个存,储索引的一个存储存储的数据结构,但是mysql里面它有没有哈希索引,有没有,有啊有啊,来说一下mysql中的memory存储引擎知识,哈希。

所以啊同时还有一部戏叫inno db存储引擎支持,叫自适应哈希什么叫自适应滑行啊,就这个这个这个过程它不是由人未来干预的,是由mysql的索引,是由mico的服务自己来断定的,而不是我们来判定好的。

明白意思吧,而不是我们来判定好的,所以这个东西你要考虑清楚了,这块也不是我说的是mysql官网里面来说的,我们来看一下,注意啊,你们在选择官网,选择这个资料学习的时候啊,官网就是最好的资料。

做一手资料里面都有相关的描述,对数量少就用花西,数量多的话就不用花西了,是他自己来操作的,人为是没办法去进行干预的,明白吗,人为干预不了的,来选择5。7吧,我们现在是5。7版本的,在5。7版本里面。

我们找一个mysql的索引的模块,找一下,就这样东西说了,most mexico index好吧,像primary ket,uniqual index,fda store in b杠tra。

这显示的是b数,但实际上指的是你能用什么是b加数好吧,然后往下看,下面有个东西,memory table outsport has seen index好吧。

memory but also smart hash index,百度搞清楚可以了好吧,把字搞清楚就可以了,所以一般情况下我们用的不加数,但是在memory存储引擎里面支持哈希索引。

同时intedv自持支持这个自适应刷新好吧,然后那个同学说对啊,那个建档的时候他会自己选择我们存储引擎,我问一下mysql现在默认的存储引擎是啥,默认的存储引擎是啥,pp移动db运动db,你懂db。

反正搞清楚行吗好吧,这是这个东西,来,下面来我们接着聊哈,希表不行了吧,他现在不行的话,我们下面就要换各种数的结构了吧,我这儿给大家列几个数,你看看好吧,某某人的什么意思,学会看官网好吧。

官网里面有很多对应的一些资料是标准答案,一定要看官网来,我们现在说几个数的东西好吧,刚才提到二叉树对吧,我让他再补充几个,比如说除了他之外,还有个东西叫b s t tra对吧,除了b s t税之外。

后面还有个东西叫a v l数,除了a v l数之外,下面还有一个东西叫红黑树,我先把这几个数据结构融入到一块啊,这几个数据结构,在常规的数据结构的一个考核中,应该问的是比较多的吧,面试中文的也比较多。

你需要对这些东西有所了解,有所掌握,很重要啊,谁说我这几个数据结构不清楚的话,这插播一个广告,谁如果对数据结构和算法东西不清楚的话,可以去学习一下左神左程云老师讲的,数据结构和算法的课程。

有人知道做什么,左晨宇老师,左晨曦老师啊,在马士兵教育,全职讲对应的数据结构和算法的课程,所以谁如果对数据结构,算法相关的东西有疑惑的话,直接导组成哇,贼牛逼对,确实很牛逼好吧,大家可以搜一下。

就成为那个人对,昨天晚上刚上完公开课好吧,所以差不多广告,呵呵好吧,我这儿啊不详细去讲这些对应的数据结构,它具体每个的特点是什么,我只给大家总结几个东西,首先先看这样,我罗列出来四个数,b数和b加数。

我是没写的,我先把这几个数罗列到这样看,那四个你告诉我有什么共同的特点,有特点吗,都是数你,你这话说还能再再再再那啥点啊,都是数,这最多只能有两个两个分支,没问题吧啊最多只能有两个分支。

是他们这四个数对应的特点,同时我会慢慢的缩小我们对应的范围,那后面这三个数是什么,这一个bs t tra啊,什么叫bs t tra啊,叫binary search tree,二叉搜索树好吧。

那后面这三个数它有什么特点,什么样,叫有序有序,后面一个数都是有顺序的好吧,左子数必须要小于根节点,右子数必须要大于根节点对吧,就是这个,那现在再来,还有下面这个东西,后面这两个它们具备什么特点。

对叫平衡平衡,这是他们对应的一系列的一个特性哦,我这儿给大家做一个简单的小总结,他们之间的一个区别以及对应的一些特点,那讲完这个东西之后,下面我们要聊什么,聊一个话题,所有人应该都知道二叉树长成的样子。

他们都有两个分支嘛,好吧都有序嘛,有可能会平衡嘛对吧,那什么叫二叉树啊,它怎么排列的,一个节点里面至多只能有两个字节点,我把这个东西补全,当我补全之后,大家其实可以看到当前数的一个样子,来放到这儿。

好了我连线我就不连了,假设这是我们对应三层的一个数吧,三层1233层三层的一个这样的数据结构,我问一下,存满之后至多能存储多少条数据,多少,是多啊是多,如果都存档的话,能吃几条数据,二三次方减一七条吧。

是不是纯白只能放弃上,你数一下都来得及,1234567嘛,这都不能放弃上数据,如果只能放七条数据的话,这里面会有一个问题,什么问题,如果我想存储更多的数据的话,应该怎么办。

比如说暗杀数在存满的情况下是制作制度,只能存储七条结果,如果想存储,更多的数据怎么办,只能将树的,的高度提高吧,提高变成四层,或者五层,或者更多层,那么层数变多了会有什么影响呢,刘老师,那变高就变高呗。

变高又怎么样,为什么不能让变高呢,变高会有什么影响,会有会有会有什么影响吗,有没有,速度慢,命中低好了,刚刚没有名字,这个同学说了一句话,叫io次数会变多,会涉及到一个数据结构工程。

不是涉及到一个操作系统里面相关的知识点,这样我要给大家说明一下什么东西,有没有人听过一个名词,什么意思呢,叫做磁盘预读,来听过的扣一,没听过的扣二,老师你怎么光讲这些新鲜名词啊,我都没听过这东西。

没听过,说明你技术有短板了,需要把这东西磨练起来,什么叫磁盘预读,注意一件事,就是内存跟磁盘进行数据交互的时候,有一个最基本的逻辑单位是称之为e或者叫做,你们能听过data配置能清过吗。

叫data page或者叫ye的大小是跟操作系统相关的,一般是四kb或者八kb好我们再进行,数据读取,这时候一般操作的都是列的整数倍,这个概念我希望大家能够理解,听到了吗,这是我需要你了解的一个。

最最最基础的一个基本概念,你把这个概念了解了,后面的东西才能往下聊,没问题吧,大家想一下,当我这儿已经有了一个页的东西了,也就是说内存和磁盘交互的时候,是有一个单位的。

这个时候你再把它跟我们前面讲的这个东西,能不能关联起来,我们先说了,这东西在进行数据读取的时候,要进行分块读取吧,既然诶怎么连不过来,是要进行分块读取,我现在要分块读取。

你想一下我们这个业的单位或页大小,不就天然已经分好块了吗,我能不能每次我就读四kb大小,能不能挺好,我能不能每次就读四kb大小,行不行,可以了,这不就天然就已经分好块了吗是吧,但是别忘了。

我们在进行数据的一个实际存储的时候,它是以页为单位进行交互的,像你这个地方,这是一个节点,一个节点是不是意味着我要读取一个月的数据,但是我们都知道,这里面明显我只能存放一个值吧,比如这是十,这是五。

这是15,这只能放三,再放八小七,这放12,这放19,是不是讲讲成这样的东西,因为每一块里面或者每一个节点里面,你是不是只能存放一个数据值,你这个节点里面我能存储更多的数据结果值吗,能吗,同学们,能啊。

你这里面能放多个值吗,你怎么放,看只有两个分支,要不然比他大小比他小,你能放多个分支吗,你是放不了的,如果你放不了的话,你就要考虑一件事,这里面有一页的一个单位了,那我如果有一页这样一个单位之后。

我如果存不满怎么办,存档会放其他东西吗,来举个例子来验证一下,打开我的电脑,这里面我新建一个文档,举个例子就知道了,这是一个文本文档里面现在什么都没有空的,我现在往里面随便复制一点东西,随便带点。

ctrl c ctrl v,你告诉我这里面有多少个字节,再加点多少字节告诉我,你知道吗,我也不知道多少字节好吧,你右击点击属性,你看到了多少字节,一共是1198个字节,但是它占用的空间是多少。

对4k b吧,你相当于你的磁盘,是不是都一个一个4k的小格子,如果我占不满的话,不好意思,占不满就占不满吗,这空着不就完了吗,是不是这意思啊,所以你想我们这里面每一个节点,如果我只能存储一个数据值的话。

我如果想让它存储更多数据的话,我是不是要加层,我如果加成的话,每一个层或者每一个节点里面读取的时候,我都是一页的话,你层数加多了,你层数加工了,你告诉我,你最后能会不会导致你的io量变多,会不会。

老同学们会不会,别关注壁纸好不好,关注壁纸干嘛,你们真的是,这壁纸我发给你了,好吧,这壁纸有什么可关注的,真的是绝了,你们也是,所以啊我们要考虑一件事,同学们什么事,为什么你的层数变高之后。

你的io次数是变多,这是产生最根本的一个原因,所以你要考虑一件事,什么事考虑什么,是不是要尽可能,多的存储数据还要减少i o的次数,换句话说是不是要减少io的,我会减少树的高度吧,是不是减少高速度高度。

这句话能理解吗,来能理解的同学给老师扣一,所以说不能越高,如果不能越高的话,你想这个数我们能变形吗,或者我们这个数能变种吗,可以吗,怎么变形,每一个阶里面我是放了一个值。

如果我的一个阶里面我如果能放多个值呢,颜值放一个十甲里面放十多号,20多号30,如果我放了三个值,你告诉我我下面的子节点,子节点会放几个,或者说会有几个孩子节点,这个六个,你哪来六个大哥这一层啊。

说这一层,两个我能犯这样的范围,第一个范围小于十可以吗,第二范围我能换成十,到20之间,可以吧,下一个我能放20~30,对吧,再下一个,我能放30,大于30的,可以吧。

我是不是可以存到我们对应四个区间了,比如说原来我现在是二叉树,我能不能让当前的这个结构,它变形或者变种一下,变成什么东西,叫多差数可以吗,可不可以,这没问题吧,当你变成多叉树之后。

是不是意味着你的孩子几点变多了,你的孩子几点变动之后,你的树是不是就变矮了,同时我这里面在进行数据存储的时候,该有序还有序对吧,该平衡你还平衡,把你之前那些二叉数这些特点我都保留下来。

所以在这个东西的基础之上慢慢变过渡之后,变成了一个什么东西,叫b数,叫b数,你是要把b数这玩意儿搞清楚了,b数是吧,来到目前为止还能跟上同学给老师扣一,能跟上吗,平衡板上的树高。

最最长指数和最短指数之差不能超过一,是那个a b l数的红黑数的话是两倍,这个不一样啊,这不一样好吧,现在把这些东西你要搞清楚了啊,这是b数,那我们现在来看一下b数的一个结构,它大概长什么样子。

很多学啊可能没见过b数长什么样子,没关系,我们一起来看一下,b数结构大概是这样一个东西,首先你在进行b数的一个实际数据存储的时候,需要搞明白一件事,什么事,它有一个最基本的概念叫做什么叫做degree。

这个diy怎么翻译呢,翻译过来叫做do,或者叫做接好do或者接什么叫do,什么叫接,表示每一个节点里面最多存放n多,n减一条数据来看一下,比如说选择四阶,四阶什么意思,每一个节点里面我可以放三条数据。

我们可以往里面插一下,你看看效果好吧,比上一走,这是一点点,我再插入二,它不会新增节点,而是往当前节点里面插入其他的一些数据值,再比如三看到往里面加每个里面因为选了四阶,最多能存放n减一个。

所以最多能放三个数据,当我再插入四这个数据的时候,它就要分裂了,看到了吗,这就进行分裂了,速度调快一点,我再往里面查看,比如说56x6 的时候,他遇到进行分裂了,再叉七差八分裂,那差一个九没事。

当我再插一个十之后,同学们告诉我什么效果,当我再插入一个十这个数据的时候,它有什么样一个效果啊,圆满了,你插20的时候,下面也要满吗,下面是不是要满了啊,它会变成一个三层的数,这是我们对应的一个b数。

对应倍数,看到了吗,这是最基础和最简单的一个数据结构吧,啊你把这东西搞清楚了,没完,还需要懂这件事什么,它只是一个最基本的数据结构的一个模型,它你知道它是没意义的,我需要把这个模型做一个过渡。

过渡是什么样子,我要存放我们数据库里面的表,里面的行记录了,所以这看起来好像是一个数值,那么我们在实际存储我们的行数据的时候,它不可能存存放一个数值,比如说这个节点往里面添换的时候。

这个值要变成几种类型的数据,首先第一个存放数据的时候,k值要有吧,k值不可能没有,k值是必须要有的,是不是意思,截图,来同学们听好了,我k值是不是要用,也是这里面我可以存储三个类型的数据。

第一个k值要什么,你需要根据你的k值来检索到我对应的数据啊,是不是在哪个地方ky要有吗,除了ky之外,你能告诉我你还需要别的数据吗,我说了啊,这是数据模型的图,我们要把它换成我们一张表。

还需要什么东西叫啥,字段信息行数据吧,行数据,还需要啥,还需要吗,value value不是行数据吗,还需要什么东西,同学们别忘了它是我们对应的数,下面是有对应的节点的。

我是不是要知道我下一个读取的数据,节点的地址是什么,下一个节点的地址,这样的东西如果你是六组利用小于六的,是不是读取五这块儿六和八之间的时候都是七,这个块大于八,读取这块这个地址。

这里面我们会包含三种类型的数据,所以你需要先把这东西搞清楚,你把这东西搞清楚之后,你就可以跟着他来画出一张图,什么图,关于我们索引的数据结构,一张图来给大家看一下。

这之前用process on的时候给大家画了一些图啊,我没挪啊,还在里边放着,找到我的msl,来你看这张图,你能不能看懂。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

每一个磁盘块,就代表是我们读取的n个页的信息,我说了吗,每次在进行数据交互的时候,读取的是e的整数倍,把每个方块表示独一个页的整数倍,默认这读的是假设是16kb。

每个方块12345678 90是多少次方块,当我练好这个磁盘块之后,每个磁盘块里面是包含三种类型的数据,第一个16 34表示我们具体的k值对吧,data表示我们实际的行数据。

p1 p2 p3 表示我们实际的指针,我这啊只画了三个范围,但其实实际存储的时候,你的范围可能比这些东西要多得多,可能很多个,但是空间有限,所以我这只画了三个来,这个图能不能看懂,能看懂的扣一好不好。

没问题吧,这如果没问题之后,下面当你看到这样的一个三层的数之后,三层数之后我要问问题了,如果我要读取28这条数据的话,a a b等于28条数据的话,我要怎么去读取,记住啊,28怎么读。

我是不是先读取磁盘块一,把磁盘块一给读取回来,读取过来之后,我要把28和36和34做对比,我一对比发现诶正好在中间,是不是沿着p2 指针把磁方块三给读取回来,当我把磁盘块三读取回来之后。

我再把28和25和31度对比,但是又好正好在中间,我是不是再根据p2 指针把磁盘块八给读回来,当我读出来之后,我是不是能把28条数据给返回回去了,这里面它整体的一个查找过程,在整个查找过程中。

我一共读取了几个四方块,三个吧是不是三个同学们注意一件事,出现什么事情,在mysql in no db的存储引擎里面,它有一个变量受,角in no bb象限配置上限size。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

你这样属性值g值多少,它默认读取的是16kb的数据,默认读取16频率的数据,也就是说这样假设我们每一个磁盘块。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

每个磁盘块它占大小是16k,我在整体读取过程中,我一共读了多大的数据量,多大的数据量,一共,不大是不是一共是48kb的数据,这个48kb对于我们现在的操作系统而言,很小的数据量吗。

像你们的电脑基本上8g内存起步吧,我始终给内存起步吧对吧,有些更有钱的同学可能配上32g内存,64g内存,是不是意思,他应该是比较简单的哇,48k很少完了,这样对于我们的内存的四点而言并不是特别高。

那下面你就要考虑另外一件事了,同学们16级不算大好吧,我给你看我电脑内存多大,64g好吧,你这个大点没关系的,越大越快好吧,这也没关系的,来往上看,我们再往下看,我们接着往下走啊。

当你把这东西搞清楚之后,你下面就要思考一件事,思考一件事的思考什么事,我如果b加数对,不是这个b数,它只有三层,我存满了之后记住啊,存满了之后,我可以存多少条数据,存满之后存多少数据,你告诉我能计算吗。

八是什么意思,我们是不是可以大概算一下,我们为了方便计算,假设一个z我占了大小是一kb,我问一下,在当前这个磁盘块里面,我最多能有几个子节点,最多能有几个直接,三个我这换了三个,你一个大小是16kb。

一个date是一kb,我最多可以存多少个,你data是不是只能占一kb上面是不是占范围,也说你最多有15个date,15个date相当于16个范围吧,是不是六个范围,是不是,这意思。

就是说我这一层里面最多可以有16个子节点,那我第二层我可以有多少子节点,第二层多少个,也是16个吧,是不是也是16个,第一层16个子地点,第二层是不是也是16个子地点,大小是一样的吗,第三层多少个。

是不是也是16个,一个dt 1 k兵马,也就是说如果我这三层全部全部我都存满了,我的计算公式应该是什么样子,应该是16乘,16x16=4096条记录啊,这等于四是多少,那么我的问题是什么。

4000条数据多还是少,多还是少,说吧,你平常自己做个练习都不止4000条记录,那如果我想存储更多的结果的话,我应该怎么办,怎么办,我是不是只能去加我们的层次了,比如说把三层的一棵树变成四层。

是不是这意思,但是很明显的一件事,朋友们你要注意了,如果我要把三层变成四层的话,我的i o的次数会不会变多,会还是不会会不会会吧,那这跟我们的设计原则又相悖了,那这时候我们要找问题了,找出问题。

为什么这个三层的b数它只能存4000条数据,谁占用了大量的存储空间,谁,date吧,那下面我就要思考一件事,我能不能把data给干掉了,对不对,所以在b数的基础之上,有了另外一个东西叫b加数,来。

我们先看b加数的数据结构,我依然往里面插入一到十十个数据,你再对比一下区别好吧,一三还是三个,四的时候变了,然后56789,传输十十个数据之后,依然是底层三层吧,我把这个图拿过来放里边,当我放过来之后。

来告诉我他们之间的区别是什么,开始找不同有什么区别吗,什么区别,同学们,箭头哈哈哈哈,最下面一层有了一个指针,或者有一个链表的指针,能够相互指向,还有吗,这边最主要的看到没有,最下层的数据最多。

患者描述呢,看好相应的区别和特点,所有在b处的时候,我们的数据是12345678 90,看数据没有重复,但在b加速的时候,叶子烟里面是包含了全量的数据,而非页里面是包含了部分数据,那通过它的对比之后。

是不是相当于有了一定的数据的冗余,当有冗余之后,我们可以思考一件什么事儿,我能不能把刚刚这个图里面的所有的date,都放到叶子节点里面去,能还是不能,你能吧,所以我在变形之后。

我能不能有这样的一张图来看好了。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

还是等,来这个图你们能看懂吗,什么意思,我的非叶子节点里面不再存储实际的数据,只有在夜间里面才会存储实际的数据,这么干行不行,行吗,可以吗,如果可以的话,一样道理,我们要进行计算了,我计算什么东西。

这样的一个三层的b加数,我如果存满的话,我可以支持多少数据量的存储,算一算吧,每一个三方块依然是16k 16 k 16 k,我读取的时候依然是读取了48kb的数据,对吧,假设我们的p一加28。

我占了十个字节,记住吧,假设你占十个字节,那相当于16x1024,再除以十,为了方便计算,24不要了,1000等于多少,1600吧,比如18号一,我可以有1600个子节点,第二层一样的算法。

是不是也是1600个子节点,第三层一个date 1 kb,是不是只能存16条,你这三层的一个b加数,如果我存满的话,我可以吃多少,1600x1600,再乘以16,等于4096万。

是不是意思我能知道多少范围是这样了,烂级别吧,是不是意思,来刚刚能听的过程能听明白,同学表示扣个一,问题吧,当你把这套东西看明白之后,与生俱来的就会面试官问出一个问题,mysqb加数的,所以一般是几层。

告诉我一般是几层,三层不问不问就不问呗,不问怎么办,那还能怎么办,你打面试官一顿问就不问呗,三层吧,四层吧,告诉大家,你说三层也好,说四层也好,个人认为都不是那么的严谨啊,都不是那么的严谨。

我这儿给大家一个统一的描述,听好了,听好了挺好,一般情况下,34层的b加数,足以支撑千万级别的数据量存储,来再来一遍,一般情况下,34层的b加数,足以支撑千万级别的数据量存储,能记住这句话吗。

面试官在问的时候,你就以这样的方式去给他进行表述,给他进行回答,没问题了,明白意思吧,因为在刚刚整个计算的公式里面,在计算的公式里面,你告诉我谁占了绝大的一个因素,或谁占了一个很大的因素,谁啊。

这吗是这吗,不要再理解为data了,好吧,是指针吗,大哥们别忘了我刚刚说的东西,我说假设p一和28占十个字节,指针的大小是不变的,而这个值是你选择的索引,只选索引列的值,这个值是有可能会变化的。

所以影响最大是谁是k这个值,假设我刚刚举个例子啊,如果我们的p和指针和p一和28,占了100个字节,你依然按照刚刚的公式算的话,变成多少了,是160x160x16,就变成了多少,409600,明白了吗。

所以谁在整个计算过程中,一对对这个这个意义非常重大,是k的值大小或者k所占用的存储空间大小,你告诉我k是大了好还是小了好,大号还是小号吗,小所以要保证一件事,保证什么k要尽可能少的占用存储空间。

明白意思吧,那这样就会有一个问题,我们在创建索引列的时候,我会用int类型好,还是用what串类型好,哪个好,int int占四个字节,但是vx所占用的字节是你自己指定的吧,如果往上站三个呢。

如果你写了三呢,但我们一般不写三了,如果你写了三呢,所以要判断什么,谁占用的空间小,我就要用哪个列作为索引,听明白了吗,就这样你要考虑清楚了,来我刚刚讲了点,听明白同学多少科目,一听白了吗,好吧。

当这个问题过了之后,面试官又会问一个问题,什么问题什么问题啊,我们的mysql的表在进行创建的时候,我的组件要不要自增,你看这张图来给我反馈,要不要自尊,你来告诉我,也说不要的,有说要你不管说要也好。

还是说不要也好,我希望你能搞明白一件事,什么事,原因是啥,你说要以前说不要以前你总要有个理由吧,占用空间小,那么我先说结论,结论是这样的,在满足业务系统的支撑的情况下,尽可能的自增。

尽可能自动叫满足业务系统情况自动自增,为什么这里面会涉及到另外的一个问题,叫什么叫索引的维护,这玩意儿很麻烦,什么叫所有的维护,举个例子来看,四八块五,15,假设18块五,我最多只能放四条记录。

比如现在我已经存满了,11 12 12 13 15,我存满了,当我存满了之后,我的问题是什么,现在我要插一条14的记录,我该怎么插,因为你底层的叶子节点之间它是有顺序对吧,有序的。

所以你的14只能插到这个里面去,那我需要干嘛,把当前的方块要拆分成两个磁盘块,11 12在这13 15在这,当你分开之后,同学们注意了,你不是单单分开就完事儿了,你上层是要有指针指下来的。

意味着上层我也需要增加一个指针,如果这个时候特别不巧,他也满了,他满了之后,他是不是也要分裂成两个,但是还要往上增,就说你在进行数据插入的时候,有可能会影响到上层的一个新增吧,业的分裂吧。

这东西是很麻烦的,而如果你递增之后会有什么效果,是往后面追加就可以了,前面会有影响吗,前面的东西会产生液分裂吗,不会了吧,是这意思啊,所以我说了,在满足业务系统的情况下,尽可能自增,刘老师。

我分配的环境里面没法自证,那就不自增了吗,对不对,能自成就自身不能自动算了,我放弃了好不好,来刚刚讲解听明白,同学给老师扣个一,神组是用分布式id嘛,小号算法吗,用小号算法都分布式id吗,rest好吧。

所以刚刚是用索引的这套知识,所以这时候再回过头来来,你告诉我为什么要使用b加数,能听明白了吗,能听明白了吗,我刚才讲了一堆。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

你要搞明白这个逻辑过程吗,面试的时候把这些点给面试官去陈述清楚哦,这里面涉及的东西还是挺多的,数据结构的,操作系统的网都有涉及到,包括他数据读取的多了去了,这东西了解了。

才能展示出来你个人的一个技术实力啊,这才是你最应该学的明白了吧,好了。

系列 6:P84:聚簇索引、二级索引和联合索引具备哪些特点 - 马士兵学堂 - BV1RY4y1Q7DL

那咱们就过了,过了之后来聊下一个话题是吗,说剧组索引。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

二级索引和联合索引,它们具备什么样的一些特点,什么叫剧组索引,什么叫联合索引,什么叫二级索引,记住,对,二级,所以还有一个叫联合索引,哇这三个对应的点抽根烟抽根,那这个普通表行记录大黄进度大的话。

插入上亿数据会失败的,失败应该不会啊,失败应该不会啊,但是数量越大的话,你的查询效率肯定会降低的好吧,来我们来解释几个概念嗯,给大家你算了,不给时间,给他一分钟时间吗,给你们一分钟时间,我点根烟。

你们上个厕所好不好,现在是28 两分钟吧,我们九点半接着讲,上厕所去好吧,上厕所去,一会儿我们接着讲下一个话题啊,叶子节点包含了完整的行记录,对叶子节点包含了完整的行记录,是的,李老师有回放吗,呃回放。

我也不知道有没有啊,我这没录啊,就确定对着呢,没问题好吧,是包含的,但是这东西啊你要说你要说完全包含,也也不能说完全对,为什么一会儿我讲到这个二级索引的时候,你就知道了,二级索引和普及索引它是有区别的。

像二级索引里面就不一定不一定好吧,一会儿来解释,算了算了,李老师,这回放我都不敢二倍速,我这个人语速比较快啊,所以那个二倍速可能背诵不了倍速干啥对吧,主键字节我就随便指了一个数据嘛,假设嘛对吧,假设。

好了九点半了,我们接着往下讲,有问题的话,我们一会来专门答疑好吧,一会就这么答疑啊,来我接着往下说,这东西第一个句子作业,什么叫句子作业向上,这来还在同学公文一,我们今天晚上讲了,来聊剧索引的事。

什么意思,想了解剧索引,你需要知道一个最基本的概念是什么概念,注意啊,我这有指定的条件,叫音中d b存储引擎中数据在进行插入的时候,数据必须跟某一个索引列绑定在一起,如果表中有主见,那么跟主键绑定。

如果没有主见,那么跟唯一键绑定,如果没有唯一见,那么选择一个六字节roid,进行绑定,这东西它是一个墨守成规的一个前提,刚刚在讲课之前,我给大家看了inno db的存储文件,还记得吧。

在移动db这种存储引擎里面,你看到了你的数据和你的索引,都放在a b d这样的一个文件里面去,里面既有数据又有索引,所以intedv存储引擎在实际的数据插入的时候。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

是必须要跟我们的,所以绑定在一起的,那么它就会有一个选择的过程,逐渐有最后的组件,没组件我们就用唯一键,没有唯一性的话,我们就用六字节的roid来进行实际的数据存储,这句话能理解的,根号扣个一能理解吗。

懂吧,所以这就会有一个问题,那到底什么叫句速索引,什么叫非剧组索引呢,记住了,听好了,叫数据,跟索引放在一起的叫做聚簇索引数据跟索引,分开存储的叫做非巨富,所以明白吧,所以把两个东西你要分清楚了。

你要分清楚了,六个字节的raid是什么,就是一个随机字符,六个字节的一个随机字符串被绑定在一起,没在一起,所以这里面与生俱来的会有另外的一个问题,垂直冲地说,所以my sum是非激素,非常正确,记住了。

叫my su中,只有非巨富,所以因为你的数据文件,你的数据文件和你的所有文件是分开存放的,生态释放了好吧,安静说,如果表中没有六字节的呢,他那个64年中y d是隐藏的,你是看不到的。

跟你表有名字字段没关系,它是一个隐藏字段,刘娜说的非常对啊,它是一个隐藏字段,你是看不到的,在我们实际的mysql的数据行里面,其实包含了非常多的隐藏字段,比如说有什么流动性当中啊。

等待着享受db下划线任务,下划线id隐藏字段,还有db下划线,肉下划线p t2 对吧,还有db下划线,t rx下划线id,还有还有delete,想想d它有很多对应的隐藏字段,这些隐藏字段你是看不到的。

你怎么看都看不到,怎么看不到,除非你看源码明白了吗,类似于oracle remember跟zamer好像不太一样,remember是有可能显示查出来的,而mexico它是绝对查不出来的,明白意思吧。

绝对查不出来啊,这些东西,所以下面还有一个问题是什么,刚刚说了max sum是结果飞进作业,那么一扔d b中有没有剧作业,有啊,有句数索引有没有非聚数索引呢,有没有非技术索引,叫移动bb,支持剧组索引。

也支持,叫非约束所,这时候肯定有很多同学就会有问题了,它其实是跟我们下面的二级索引,要产生关联的一个核心点,关键的一个核心点我一样,再给大家个问题来讲,到现在能听懂的同学给老师扣个一,能听懂吗,问题吧。

下面来聊几个问题,什么问题,我们就来解释,首先第一个一个表可以有几个,所以,记号,无限三个可以吧,第二个每一个索引都是一颗b加数,还是所有的索引供应雇雇用,b和b加数,共有啥能力的独立啊。

独立也就是说是一个表中会存在多颗一加数,明白了啊,第三个数据数据就表中数据存储几份,我们都知道叶子烟里面存的是数据行,存几份,记住一份,如果存一份的话,就会存在一个问题,同学们什么问题。

我一个表里面会包含n多个b加数,如果你的数据只存储实际的一份的话,那么其他的b加数的yes di里面存储什么数据,什么数据,所以记住一句话,同学们记住我下面写这句话,数据是只存储一份的。

这是孙处一份好吧,其他的非聚簇索引的叶子节点中存储的是什么,剧组索引的k值叫k值,能理解意思吧,所以,念头gb中也包含了非聚簇,所以嘛能听明白了吗,也包含了非技术索引,它放的是i d值。

这样一样给大家举一个例子吧,比如说看这张图表里面这个表有三个字段,id name age,一共有三个对应的数据列,下次训练之后,我现在id是主键,内部是一颗普通索引,那么d组件的索引建成之后是这样子。

下面啊空间有限,所以a值自动我没写,这是我们对应的这个剧组索引,而name也是一颗b加数的话,name这个里面存的是什么,看到了吗,名字对应下来之后,最底下放的是什么,放的是我们对应的id值。

所以在内部这颗b加树它就是一颗非聚簇索引,而i d这个b加树它就是一棵巨树索引,明白了吗,同学们听明白了吗,来这块听明白,同学给老师扣个一吧,能听懂,啊把这东西啊你要搞清楚了,所以什么叫二级索引呀。

或者说什么叫辅助索引,表示意思是一样的,引导db中的非剧组,所以都可以称之为叫二级,所以或者辅助,明白吧,这是它最基本的一个概念,我希望同学们把这个概念给了解清楚了,就这块的一个基本讲解。

这块的基本讲解啊,来这东西能过的,来给老师扣个一,能够吗,两个概念,二级索引跟回表没关系,回表描述是一个过程,所以描述是一个具体的物理结构,pad是不一样的,一会我来解释回表的事情。

一会儿我来解释回表的事情,20岁一定没有很懂,举举个例子吧,举例子说明啊,文章表里面有id逗号,name,逗号配置逗号,tender,四个列在四个列里面,id是主键,内蒙是普通索引,好那我问一下。

在查询的时候,数据跟谁绑在一块儿,数据跟id绑定在一起对吧,name对应这b加数叶子节点中存储的什么值,开机了是吧,此时内部,就叫做辅助,所以或者二级,所以这个意思听到了吗。

它是用来帮助辅助查询的国家里,所以就这意思明白了吗,好吧,如何来确定哪个索性是二级索引,你非技术索引都是二级索引,就这么简单,没有任何唯一件和组件的表述,是建立的第一个索引吗,没有任何主见。

没有任何文件的话,他会选择六六字节的roid,作为你的技术索引存在,作为你的句子逻辑存在,就是我刚刚说的顺序是优先主键,主键没有唯一键,唯一键没有的话,会生成一个六字节的roy d。

这上面的顺序把顺序要记清楚了好吧,就这一块儿,小梦说优先pk嘛,什么意思,没懂来下面来解释多个链接索引的,不管你有多少个列,非静索引,都是我们对应的辅助索引或者二级索引,明白了吗,不关就多少个练好吧。

但是你的表里面可能出现一种情况,主线可能只有一个,但是唯一一件有多个,如果存在多个唯一键的话,那么这个时候表里面又没有主见,那么你的数据剧组索引,会按照你唯一键指定的顺序来。

比如a b c3 个点都是va键,a在前就选择a b在前,选择b c在前,选择c,唯一四代和c指针吗,要要,没有任何唯一键和主键的表,多个列建索引的,哪个是主线,六字节的rod,明白了吗。

六字节的rod,六字节的roid过目,v4 c指令吗,要要没指定的话,就是i d了,好吧,来下面解释下一个概念叫联合索引,这还有个概念叫符合,所以这是什么意思,很简单好吧,类似于联合主键的意思。

一般情况下我们在设置索引列索引列的时候,只会选择一个列作为索引字段好,但是在某些特殊情况下,需要将多个列共同组成一个索引字段,把称之为叫句哦,称之叫联合,所以就相当于原来是一个列,现在变成了多个列。

仅此而已,仅此而已,好吧,这能听明白吗,这个联合作业,联合主键和联合有啥区别,他俩能在一块比,这俩能在一块比吗,这俩没有什么可比性啊,明白了吗,my time中索引都是辅助索引吗,可以这么理解。

因为它没有句索引,只有非剧索引,所以它都是辅助来进行查询的啊,来你连个作业听明白了吗,听明白了,给老师扣个一,所以你就查找标记吗,是你查找的字段吗,那你的字段来判断吧,是这意思好吧好了。

这是这几个存在的最基本的概念,我觉得你应该了解了吧,好吧,来再往下看,说第四个在进行索引优化的时候。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

需要注意什么问题,我刚刚已经展示了非常非常多的索引相关的,一些信息了,你告诉我根据上面学的东西,我们如何来进行索引优化呢,可以说那my sm里面e键存的是什么,存的是地址,存的是地址,看好了。

上面我已经讲了这么多点了,下一个问题是。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

系列 6:P85:在进行索引优化时应该注意什么问题? - 马士兵学堂 - BV1RY4y1Q7DL

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

所以优化的时候,要注意啥,注意什么,同学知道了啊,第一个,所以占用的存储空间需要尽可能索引字段,要尽可能少的占用存储空间,还有吗,在满足业务系统的需求类,尽可能就这还有吗,还有啥,没了,所以在进行。

索引字段,我刚才没提这东西,hope说了就尽可能不要为空,我说的东西啊,呃空这玩意在数据库里面,它是一个非常非常特殊的存在,因为在很多情况下面,空都不等于空,对吧。

空调那叫is not for long呢对吧,但是尽量不要选择为空的字段,听明白意思吧好吧,这个东西啊,还有第四个选择索引的时候,索引,的基数要尽可能的,有人知道什么叫基数吗,你知道什么叫基数吗。

这里面有一个计算公式,什么计算公式,就是说我们在建索引的时候,到底给哪些列来建我们对应的索引,这边有计算公式,记住了,叫dv除以count,大于等于80%,这四段适合创建,所以明白意思吗。

刚刚那个同学恶龙咆哮说,假如给性别加字段,你给性别加索引一点意义都没有,一点意义都没有,dv是什么,不知道dv是啥吗,就这,distinct value,唯一值,唯一值除以count要大于等于80%。

明白了吗,性别这个字段你加索引一点意义都没有,就是要给你视频加作业没意义啊,你加作业干嘛,你性别只有男和女男女,你加缩减之后,你通过作业来查询没有意义啊,你加这玩意儿明白意思吧,这没理啊。

对你的不重复的值要尽可能的多好吧,充值多的话,这个长期的话要比较麻烦,ok那什么,看到了吗,查了也不会怎么样吗,你在另外一个字段查询的时候,查出来都是重复数据吗,那没意义,也不会怎么样,还有啥。

不要给所有的字段都添加索引,并不是索引越多越好,明白了吗,这点是很重要的,很多同学老师,我能不能给表里面的每一个字段都添加了,所以不要这样,你给人表里面的每一个字段都添加索引之后,效率不一定高。

效率不一定高,它会占用大量的存储空间,明白意思吧啊再往下看第六个还有什么,还有吗,尽量避免索引失效,尽量避免索引失效,尽量避免索引失效,那这里面就涉及到一个问题,老师索引失效会有哪些场景。

比如下一个我要聊的话题,什么情况下会导致索引失效,有人能说一下吗,所以那应该是很少修改的,这个是对的,下一个吧,这个我这我之前没准备啊,下一个,尽量选择的索引字段尽量不要频繁,修改,来第一种情况。

所以这种情况你们说的啥来着,查询的时候,左边时候,不要加百分号对吧,还有吗,意思呢all的情况我建议你不要说all的情况,不要说,看到吗,所以是这样的,好,所以字段上不要添加任何的表达式操作,明白吧。

不要加任何表达式操作啊,这是第二个,还有吗,第三个对,所以,字段在使用的时候不要出现类型的影视,也是,转换,看啥,所以,以上不要出现函数计算,说什么组合索引在进行使用的时候,要遵循最主匹配原则。

我还没说这东西啊,匹配原则,可作品原则我还没说,不知道电影是转换啥意思,来给你举个例子啊,等下我给你找个案例啊,找一个案例,我想想在哪放着,国家电营业一堆情况。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

知道一下,你找一下这个东西,所以失效,嗯还有啥,你现在睡觉吗,不知道从哪讲,这玩意儿,等我找一下,忘了昨天咱俩讲的,所以失效的情况我这写了一堆啊,宋主要,什么算了,给大家举个例子啊。

就是这个东西是啥意思,什么叫影视转换,比如说我们在进行具体的数据库操作的时候,有一个叫做什么来着算,来看这个方式来演示这个这个这个这个案例啊,来打开我们的数据库,演示一个案例,柚子dem。

大概有点存在多少,这个user你看看表吧,表演单一几个字段,三个字段好吧,123id name和phone,只有且只有这三个字段好吧,当报完了三个字段之后,还有一件事。

我现在给我们的phone字段我添加一个索引,讲完了讲完之后查询语句,你在写的时候,比如说我随便写一个,大家看到这个sql语句吗,我问一下,我现在这种作文字段是什么类型的,什么类型,观察类型啊。

我现在写什么类型,数字是数字类型,你运行之后,你看一下你的执行计划,在执行计划里面k这页里面显示的就是n,如果现在我换一种操作,我把这个东西加上单引号引起来,这有值了吗,你知道吧,这就是我们对应的类型。

如果你的类型发生一种隐式转换的话,它可能会导致我们对应的索引失效,就这意思明白吧,看出来了吗,那这个案例看明白的同学给老师扣个一。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

能看懂吗,就就这意思好吧,大家都懂的情况好吧,再往下看,还有一个东西我需要大家说一下,in或者,很多情况下会导致,所以失效,但是要根据实际的情况来进行判断,明白意思吗。

你不要上来就说印会失效或者懊悔失效,这种说法都是不对的,都是不对的,ok直播不是直播,是录播,所以啊把这几种情况给大家说清楚,说清之后,你随便哪个地方能举出一些案例就够了,能举出一些案例。

我记得我之前用过这东西,但是忘了好吧,来再看还有什么,第七个,在使用组合索引的时候,如果中间的某个索引列使用了范围查询,那么会导致后续的索引失效,这东西啊一会儿也是一样,我会给大家举个例子。

来说明这几种对应的一个情况,好吧,这我写了七个,我就差不多够了吧,你面试的时候,请给面试官说这些情况就可以了好了,这几个点能听吗,同学给我扣一,能看懂吗,这这个东西啊我来给大家一会,我来解释几个名词。

解释几个名词的时候,我们把对应的案例啊给大家做一个演示,做个演示好吧好了,这是刚刚上面讲的这些核心的一些知识,讲完核心知识之后,我们再讲几个关键名词吧,把几个关键名词讲完之后,基本上就结束了。

第一个名词刚才提到的这回表,来知道回表是啥意思的,给老师扣一,不知道扣二,你们知道什么叫回表吗,鬼表示这样一个意思啊,给大家解释一下,我们来列举一个场景,什么场景,比如说表里面有id逗号,name逗号。

认识多少,针对四个字段啊,先明确这四个字段,当我定好四个字段之后,我来规定一下,这里面有i d是组件好吧,name是普通,所以我写一个语句叫flat行,from people where name等于。

张三问一下,这条sql语句的查找过程是什么样子的,商用的,先根据,内部的值去name b加数,找到对应的叶子节点吧,我问一下这个叶子节点取得数据是什么数据啊,液在放什么,取出id值吧。

再根据id值去id,b加速攻找到查找全部的结果,这个过程称之为回表,是回表的意义,明白意思吧,那我问的是什么,回表的效率高还是低啊,回转的效率高还是低,怀表的效率比较低好吧,尽可能不要使用。

我尽可能避免回表的产生,明白意思吧,这些东西这是回表,那这个没问题的,扣一这个回答概念啊,他需要来回去回到原来表里面查询,我们对应的一个数据记录,是第一个来聊第二个东西,刚才要是讲的第二个叫索引覆盖。

什么叫索引覆盖啊,表示一模一样的数据一模一样,我把这个语句改一下,改成什么呢,加油id逗号name,大家问一下他的操作构成什么样子的,什么样子,是不是先根据name的值去name的b加数查找结果,能够。

直接获取到id和内容,还需要就不需要去a d的d加数,查找其他的查找数据了,这个过程,叫做索引覆盖,明白了吗,什么叫索引覆盖,也非常简单,就是说索引的叶子节点中,包含了要查询的全部数据啊,叫做索引覆盖。

能听懂吗,这效率高还是低啊,是高还是低高吗,这谁啊推荐使用,所以盖这些东西,看来再往下看下一个,他们叫什么叫最左匹配原则,这是什么东西啊,什么叫最左匹配原则呀,其实他也挺好理解的啊,它主要针对什么。

针对的是组合索引,一样改一下条件吧,id name和逗号位置是组合所有,组合专业就在查询,有时候必须要从左向右匹配这东西啊,就算我们呃去购物网站,你在购物网站里面写写写地址的时候一样,必须要先学省。

再选四,再选缺,缺一不可的,必须按照这样的这样的一个数据来,老师这里面会与生俱来对应几个语句啊,给大家查一下现在的行,from table,where name等于比如问号and edge等于问号。

这是第一个语句,下面还有几条,把它干一下,删掉,删掉,我问一下这四条语句里面哪个会用到组合索引,14134134,还是那句话,你记住,我刚刚说那个标准顺序,必须要从左向右挨个匹配,所以在匹配的时候。

我们先匹配第一个内部age是不是符合这个顺序,所以是没问题的,第二个edge能复合吗,必须要先匹配name再匹配edge,你这里面没有name,所以第二个是不行的,第三个可以吗,可以啊,虽然没有。

但是我能匹配到name也是可以使用的,第四个把name和age顺序换了一下,第四个行不行,第四个节目,这是比较有争议的地方,其实我问一个问题就行了,如果把name和age的顺序来回换一下。

会影响我们最终的查询结果吗,会影响吗,不会的,所以这块会有一个东西,就刚刚说的是优化系,会优化明白吧,会调整好我们对应的一个顺序就完了,这就是我们说的最左匹配原则对吧,除了最左匹配原则之外。

还有下面一个东西,什么原理是什么,没啥原理。

系列 6:P86:什么情况下会导致索引失效? - 马士兵学堂 - BV1RY4y1Q7DL

在比较数据的时候,你要先比较第一个才能比较第二个,只有第一个相同的,我才会比较第二个,可能如果第一个不一样,第二就没必要比较了,就这么简单,来啊下面最后一个我们来讲一个索引,下推液化气后会不会走。

索引是不是优化气不会阻索引,它优化完成之后,会把你这两个条件的顺序换一下,换完之后不就符合内幕和a值了吗,它就会走啊,会走啊,汇总好吧,为什么内部一定要在前,因为你在创建对应的b加数的时候,大家看好了。

我们刚刚给大家展示的,找一下,刚给大家展示这个索引结构的时候,他这个key是不是只有一个值,当你是一个组合索引的时候,它就变成两个直道,比张三和28会放在一起,李四和39会放到一起,所以我在匹配的时候。

它相当于是一个二元组,明白吗,x y2 元组我必须要先比较x才能比较y,如果x不一样,我就连y比较的意义都没有了,y的永远不可能比到,只有x降头的时候,我才可能才可能会比到y就这意思好吧,是这意思啊。

你要最后面一个话题吧,叫三能行吗,三行啊,三可以不要说话吗,国木森可以的,虽然可以啊,虽然另外一只,但是name的符合那个顺序嘛,所以是可以用的,来聊最后一个东西叫索引下推,什么叫索引下推。

其实他也非常好理解啊,非常好理解什么意思,还是当前这样一个情况,我来写一个sl语句吧,flag行from k宝,where name等于根号,an值等于根号,就这样的一个普通字母语句,在没有。

所以下推之前他是怎么处理的呢,处理原则非常非常简,单,是先根据内部这值从存储,引擎中拿到符合条件的数据,然后什么在server中对age进行数据过滤,这没有索性下载之前有了,所以下推之后怎么做的,直接。

根据name和age,从存储引擎中筛选对应的数据返回给server,不需要,做数据过滤,明白意思吧,就这意思,必要的数据获利好吧,这叫回应下推,所以你把这东西想到之后,你再联想一下。

刚刚最上面我给你画了个图,他下推是相对哪了什么的,下推,这是神子下垂是吧,原来在server层,我要对age做的下推挪到了哪,挪到了存储引擎层,明白意思吧,从service层数多少,存储引擎层。

什么叫有了,什么叫没有,在mysql 5。6和5。7之前。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

是不包含索引下推这个东西的,是5。6还是5。78,不忘的一个版本的啊,这个版本之后它才具备了索引下推这个功能,当然这个功能是不需要用户开启的,它默认是开启的,有一个属性15万吧。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

是那。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

叫啥来着,叫。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

你一声,我来看啊,有一个东西叫索引下推,这个叫index,肯定是push down,它默认是开启的。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

默认是开启的,在5。7之后默认就开启了,所以你不需要管这些东西。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

你大概知道,所以下跌是什么意思就可以了,明白意思了吧,这叫算下退,没别的意思,来这些点看学校同学给我扣个一,没看懂吗,没问题吧好吧,当这些东西都没问题之前都都没问题之后,下面我们要说一个东西了。

说啥最后一个问题,刚刚讲了这么多,讲这么多是吧,有有有啥用来告诉我。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

所以下载有用吗,所以下载有用吗,它的数据量是一个级别吗,你只匹配内幕,是把所有内幕匹配的数据反而回去了,age还没做数据筛选,你把mate和a这两个东西一起数据筛选,看筛选完数据是不是要少了。

你io量已经少少了吧,好吧,好了聊完这个东西之后,下面我们来聊最后一个东西,这个东西什么东西,所以优化我刚刚讲那么多东西了,讲那么多东西了,我们在回答索引优化问题的时候,我到底应该怎么去回答。

你不要上来之后,你不要上来之后就给面试官说,我通过判断之后发现我们的索引,我们的索引那个我没索引没有失效,所以我加了个索引字段,你这样去描述是没有意义的,你告诉我这个,所以这个优化问题我应该怎么去回答。

没有你所学的知识能回答吗,能回答,大院记住啊,你在回答优化问题的时候,你要给人的感觉是什么,是你真真正正的你做过优化,而不是说我从网上随便看了个帖子,我就能把优化的问题给大家说出来,不是这样的。

你要怎么去判断这件事情,非常简单,来听好了,这样的方式回答在之前,做叉叉项目的时候,我们有一个要数据量非常大哇,千万级别,千万级别好吧,写了一个非常简单的sql语句,就是一个条件,过滤好。

但是查询的效果非常差,花费了十几秒,哇通过分析之后,我发现通过查看执行计划后,也确实用到的索引是吧,而且查询条件非常简单,只有一个,怎么办,只有一个,怎么定义用法,能优化吗,啊怎么做。

利用前面所学的知识组合索引对覆盖话费,剃头说的非常对,现在可以说只有一个经过分析,发现我要查询的字段,字段用四个字段啊,但是这四个字段啊,而且这四个字段包含了查询的某一个查,包含了查询的。

还包含查询条件,因此不考虑减少回表,因此考虑在长安学过程中出现了大量的回表,好吧,此时将所有的查询表字段,和条件是组成了组合,所以好达到了优化效果好,执行完成之后,只需要,花费一秒左右就可以完成查询。

你这么说吗,拆开说绝对录播了,自己我看过对,是录播,我问你是录播吗,一直说录播吗,看到了吗,你能这样说吗,好同学们,你能能不能这样说,才说这能量扣一不能的,扣二能吗,不严谨,那不严谨吗。

我上课临时写的吗,你觉得哪儿不严谨,能不能自己学优化,能不能自己再编一下,能不能带上你自己的业务量,带上你自己的数据量可以吗,可以吧,我觉得没问题吧,嗯1000万数据加索引要dba来。

要dba以来没关系,你后面可以再加一个补充大量数据,添加索引字段信息的时候,可能会出现缩表情况,所以是跟那个那个,所以我提出建议使用什么,mysql提供的在线d d l操作,来完成天下索引的功能。

行不行,可以吗,这有漏洞对吧,给你补上了吧,有什么东西吗,粉丝都不知道这东西啊,在线b b r mysql,5。6版本之后出现一个在线地点啊,你可以给它进行索引的一个添加,没关系的。

这就是具体东西下去自己看明白了吗,这可以了吧对吧。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

你黑马扎吗,我只是给到大家一个案例,我我并不是想把这个例子交给你们好吧,因为我既然公开课上讲到这玩意儿了,这玩意就烂大街了,明白吗,很多人都会抄走,很多人都会有这个东西,所以这东西不是你的加分项。

加分在什么地方,是这样的描述方式,你在写的时候一定要突出什么几个点,同学们记清楚了,第一个叫实际场景,你需要进行切换,第二个第21场景,第二个是什么,是问题的情况,第三个是优化的方式和你的思考。

思考的过程好吧,第四个是达到的效果,能懂这意思吗,这是你在回答对应的优化问题的时候,你整体的思路,你要以这样的方式去回答,而不是上来之后不要用三星,再用索引,不要这么去描述,能听到我想教给你的是啥吗。

来听白同学给我扣个一,能不能认懂,所以你把这种方式画出技巧,学会了,套用上你之前项目里面的案例不就完了吗,我不信你们项目里面没有对应的sql优化案例,不可能没有吧,光我现在学生问到我了。

我给你开一个实际的案例好吧,一个学生之前问我的,他实际公司里面的应用场景出现了问题,这数据量消耗比较慢,我给你看一下,太多了好吧,让我们来看你学生问我的,李老师打扰你一下,来看一下干什么事儿。

这个学生他的情况也非常简单,这是对应查询语句,sd什么cell number,cancel,什么什么chinese name,type of,type of product,这不多吧,这一句能看懂吗。

能看懂吧,我觉得这一句已经非常简单了,执行完成之后,他花费的时间是多少,0。104秒,我问一下这个0。104秒是快还是慢,快还是慢,大哥们负点责任,你们在说快再说慢的时候,能不能问一嘴数据量。

他过亿的数据量还还卖吗,别上来就慢跑快,你问一下数据量吗。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

对不对,所以下次问了一个问题,他说打扰你一下,他说这个表总共才35万,数据category id等于6980,有20多万条好看的id,也要有索引字段了,好吧,我发完之后,他给我发了什么。

发现它对应的执行计划,杜老师,你看这个执行计划这样的,这个字段明显用到了索引,不是没用。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

索引用到了听到索引了,但是效率依然很低,不太能满足我们的业务需要。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

怎么办,我看完他之后,我说我可以ok,你可以考虑关闭一个属性叫index merge,我我刚开始怀疑啊,他可能触发了一些索引合并,所以导致了他出现了一些问题好吧,做完之后他说老师运行完了还是100多秒。

没有任何变化,0。106反而还慢了一点,我觉得这个那这东西肯定不行了对吧,再给它进行优化,我说这个有组合索引吗,可是没有组合索引,我说你串一个组合索引试试好吧,我串完之后他说还不行。

我说把排序再去掉试试看是不是排序的问题,是做了一堆,做了一堆检测完啊,都不行,还一样,这东西要慢慢去调整的,这次是0。1118秒好吧,再优化再优化,我说你加这个东西,再加上排序,加完之后。

这是它对应的结果,大家看看效果,谁叫我,我们出一下吧,0。106÷0。006,快了17倍。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

看明白了吗,就是快这么多,自己都自己都惊讶了,明白了吗,这是对应的数据吗,所以你要想明白说我要在哪些地方去进行优化,我要去调整哪些地方,你别两眼一抹黑,竞猜我最怕什么,你知道吗。

很多b i g同学找到我说,梁老师,你帮我看一下这个sl语怎么优化,你发给我,我也懵逼,真懵逼,我根本不知道怎么做,你想你发给我一个那么复杂的sql语句,然后你告诉我说老师你帮我优化一下。

我咋能给你优化了,我是个人,我又不是个神,能懂我意思吗,这经常说的一个一个很重要的一个问题,好吧,等下我给你找一下午一个同学,就今天下午一个学生刚给我发的,呃找一下,就这个。

我们等会儿等会儿我们看看这个sql语句啊,我跟你说,看完这个剧,我自己心态都崩了,嗯还没翻到,等一下,看这个,这是他给我发了一个sql语句,从select开始往下走走走走走,你去看这个sql语句。

你去看,这最后一句。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

来你告诉我这样的语句,你告诉我,你让我去怎么优化,我我我我打优化,你告诉我怎么做,一条就一条没完,你告诉我能优化吗,我优化不了,我是个人,我不是个神,好不好,所以你们要搞清楚这个东西明白了。

所以不同的案例你要去分析他,说到底哪出现了问题,应该怎么去做,这些东西应该以什么方式进行优化,这才是最关键和最核心的点,明白了吗,噗都打结了,不是打结了,这个东西展开啊,微信里面可能看的比较长。

微信里面看的比较长,打开之后已经大概几十行几百行,但是依然很很麻烦啊,是不是,不是故意难为我,我在公司里面见过最长的一个,一个sql 145500行。

系列 6:P87:如果通过索引知识来进行优化? - 马士兵学堂 - BV1RY4y1Q7DL

下次注意句,这很正常,所以你们需要说的是什么,我需要给你讲实啊,不是让你们去说这个思路语句长度的问题,而是说你们在进行优化的时候,不要2。18,黑,明白吗,最害怕的是这玩意儿啊,你要干嘛。

哪怕sql语句,sql语句再复杂,不管它多么复杂都没关系,你要学会去做拆分,你要自由就去拆分,你要一层一层的去迭代,一层一层的去搞这东西,把它理解错了,这才是最关键,最核心的,他是生病,铅笔干啥。

这很正常,但好多表在关里面就这死杂一点,复杂点也正常吧,明白意思吧,所以掌握合理的方式方法,这一点很重要啊,包括你们在提到这些优化问题的时候,再好好去思考,一定要按照我说的这个思路你去进行处理。

如果你按照这样的思路去解决的话,真的很麻烦,真的很麻烦,不要上来之后有老师你帮我调一下优,我咋调都调不了,好吧行了,这东西啊,咱们大概就聊这么多吧好吧,来这今天晚上有收获的同学给老师扣个一了,好不好。

讲了两个小时啊,我觉得我讲的已经够多了好吧,老师数据量过亿,增加索引会非常慢,有什么好的方式了,没办法,就是用在线d d l的方式来加索引,这个没别的招都能夸张,慢就慢,这个没没办法,我们打扰一下。

现在几位是不是应该分表了,举个例子,10万百万就比较合适,低于多少条加索引访问一下写系统,我觉得是这样哈,帮助听好你的问题,我们一般情况下数据量过千万级的时候,就要进行分部分表了,但这只是一个预估量。

它没有明显的一个数据统计,你过千万,你还要判断一件事,除了过千万这个级别之外,你还要判断什么东西,你要判断一个点,您每一行记录占用的空间是多大,每一行记录你一个一行业里面。

十个字段和50个字段和三个字段,效果一定是不一样的,所以不一定是说过千万,我就要重复分表,这东西是干什么,是根据你实际的需求来判定,当你发现你的表数据变多之后,你查询不管怎么优化都优化不了了。

这个时候可以考虑添加我们对应的啊,可以进入我们的错误分表,但不是说我一旦过千万之后,就一定要分出去秒,这也没什么说的,没什么说的好吧,如果my mysql中某个字,但是汉字的话。

在汉字键索引该b加数是汉字的话,怎么保持有序,奥斯干嘛吗,字典序吗,英文名字典序嘛,数字就是数值嘛,汉字的话你要干嘛嘛,但是建议不要用汉字,不要用汉字,汉字的话这个太麻烦了,好吧好吧行了,这东西啊。

咱们大概就聊这么多吧,这只是mysql里面的呃,一丢丢或者一奶奶,刚刚也给大家提到了相关的一些优化的问题啊,给大家看一个文档,就是之前我在讲这个mysql优化课的时候,大家看一下,这叫msl调优。

讲mysql调优的时候,给大家讲到的一些细节上的一些点,大家看一下,你调料里面包含的东西非常多,你不要上来之后就想着说我要加索引,所以优化的时候你可以分几个维度和几个细节。

比如说你关于mysql性能的一个监控是什么样子的,对吧,你对应mysql的一些呃spammer表结构是什么样子的,你的索引要怎么进行优化,包括你对应的sql语句要怎么调整,包括你的参数要怎么去优优化。

怎么去调整,包括你是不是要加分工那个分布式的数据库。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

这东西都要合理判断好吧,沈阳马天志说看不到,我说话吗,对看不到的,因为是录播,所以看不到,开玩笑,画风有什么软件啊,我刚说了吗,分叶云笔记,枫叶云笔记,是直播是直播,哎呀是直播啊,那你不理我。

我没看到你发的消息啊,你发啥了,没看到吗,梁老师结束的时候,可以谈一下,不同的存储引擎对于事物的支持区别吗,可以另外给压缩了,来说一下它们的区别呃,我之前讲过这东西,我现在在哪儿讲,我找一下。

我记得之前讲过这玩意儿好像,四个,我,找一下,所以,太多了个旺,看这图吧,这是之前画的一张图啊,就是关于这个组合式九的msl,amex up和windodb的呃,首先第一个综艺类型masm面。

只有非技术索引性层地狱里面有剧组索引,也有非剧索引,第二个事物呃,my sm是不支持事物的,印度db是支持事务的,第二个第三个表所my sum支持表,所应当db也支持表锁行锁,my sum不支持。

但应当db支持外界maximism,不支持移动db支持全员索引masm支持,然后应用db五点之后支持操作,大量查询的时候用我们的my su,然后增删改查的时候就移动db,但这东西啊。

坦白说一般情况下移动db用的更多一点,其他用的并不是特别多,好你大概了解一下就够了,ok所东西啊,咱们明天讲吧,明天我讲一下事物相关的点,好,检查事物一些特性啊,检查事物特性的一些实现原理。

讲一下mv c c,咱们再到时再聊好吧,老师有主从知识吗,有主从的话,我讲过主从复制,然后讲过读写分离仪,讲过分部分表都都讲过,包括像mt这样东西我也讲过,好吧,就是你学生问你的那个,有学生问我。

那个为啥那个索引添加之后排序变坏了,就减少了回表嘛,就减少了回表,就是减少回表,我那个东西我没公开课那个那个那个不是主从,这东西我公开课没讲过啊,都是在vip里面讲的,公开课没讲过,来看一下吧。

嗯这里有一定的文档给大家看一下,就是比如说主动复制的原理,我之前写的什么主动复制原理是啥,怎么去复制的步骤是啥,形式有哪些,然后主动复制延时应该怎么去做,这是应该都提到过,都讲过这个东西好吧。

包括它的一些安装配置,你要怎么去配,搭建的时候要怎么去搭建详细的步骤,这些东西都有好吧,他那个也是减少了回表的产生,就这么干的是吧,然后包括像my cashing sphere,我都给讲过,没讲过。

ok笔记能发下吗,笔记不发了发吗,写这种东西要发吗,再说吧好吧,都发下来吧,那么多markdown想多了好吧,就发ok好了,今天的这个具体干货,咱们就聊这么多吧好吧,下面呢聊点更好玩的东西,聊聊什么啊。

不发怎么学,听我讲这些东西你就慢慢消化吧。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

不发你那个那个那些段都发了,跟vip同学太太不公平了好吧,下面聊点好玩的东西吧,聊点好玩的啥啊,刚刚给大家讲了mico相关的东西,我刚刚给大家看了一下msl调的一个文档啊。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

呃下面给大家说一些东西,就是你在学技术的时候,或者你在学习的时候到底要怎么去学习,接下广告,我不不打广告,我们就聊会儿天,我们不麦克,今天不卖课,不给大家打广告,里面点好玩的东西啊,就是聊到一个问题。

你们觉得我今天讲完这个课之后,你们都觉得收获比较大,我能学到很多东西,这样我想给大家说一件事是什么,希望大家在以后学习的时候,能有一个很重要的东西,叫什么叫方向性的东西,这东西我觉得是比较重要的。

什么意思啊,有很多同学听完我这个讲东西之后,你觉得我把索引讲完了吗,或者你觉得我把索引讲完整了吗,其实没有啊,这所有里面包含的东西还有很多,这只是其中的一些细节,或者一些比较重要的部分。

和面试中问的比较多的东西,我优先拿出来给你讲,但其实索里面包含的东西还很多,大家以后在学习的时候啊,你们既然晚上来听课了,意味着你们平常的时候,自己可能也会学点别的东西,包,或者以后琢磨点东西对吧。

一定要一直在不断的学习,那么我想说的是什么,你们在学习的时候一定要有一个方向,同时一定要注意一件事,什么事儿叫体系化学习,体系化学习这件事情是非常非常重要,什么叫体系化学习嗯,很多同学出去面试的时候。

应该收到过一些评价,比如说知识碎片化,比如知识不成体系,一定收到过这样的一些评价,这些评价都反映了你在学习技术的时候,你自己存在的一些短板,所以我希望同学们在学习的时候,一定要有一个体系化学习。

我就是不要说我今天学一点,每天学一点或者学一点,但学的东西都不一样,这是最可怕的一件事情,包括我们的vip也经常问我一个问题的老师,我在学技术的时候,我是多个技术并行着学,还是说我学完某一个点之后。

我再去学另外一个点,你们觉得哪个好一点,你们觉得病情好还是单独学一个好一发,一般都是看到什么学什么,告诉大家我个人的建议啊,大家学习的时候一个一个来,你千万不要同一时刻看三门新技术,或者看n门新技术。

或者看一门技术,千万不要这样,这边一定要一个一个来,因为11111堆东西堆到你那儿之后,你很麻烦,或者你看起来会很容易忘,或者说体育效果是非常非常差的,学习就是把某一个体系,某个体系学完了还有一个点。

还有一点也很重要,一定会用到自己的一些知识盲区,老师讲课的时候一定会提到一些点,当你提到了一些点之后,你会发现一件事,什么事,这东西我不会,那东西不会那么很多同学会干嘛呢,会从这个点里面离开。

把我要搞明白的东西,我搞明白之后,我再接着来学习,有多少人这么干的,有吗,就比如我学mysql,昨天讲了一个o l a p,我不知道是啥意思好了,我去学o l a p,我把o l p搞明白之后。

我再回过头来学mysql,这种方式,也是大家非常非常要就一定要摒弃掉的,我刚才有好的方式是什么,你在学习技术的时候,学习技术的时候,先去过一遍整体的知识的总体概括,概括完了之后,当你不会的点。

拿一个本或拿一个文档,在线文档把它给记录下来,你把它记录下来之后,接着往下学,等你有时间有一些零碎的时间,额外的时间之后再去补那些你不会的点,千万不要让自己跑偏了,也有可能有很多学生是学生是这样学习的。

他沿着一条主线去学习学学的翻译,有东西不会了好了,我从中间分一条叉出来对吧,从这分量差出来,然后又有同学说老师这个东西我也不会好吧,又分量差出来又被拿出来,有些同学还比较好,他能回归到主线上面去。

但有很多同学你是回归不到主线的,你学学学pp了,明白吗,你学篇之后就变得很麻烦,你懂我意思吧,所以这些东西才是你要摒弃一些点,这都是学习方法上面的一些小技巧,然后除了这个东西之外,约等于1米8。

说有详细的路线分享吗,呃想要路线,一会我可以给你,但是我在讲路线之前啊,我还想再说明一个东西,或者再说明一件事,你们有人对学习路线有疑惑吗,老师我现在想学学要学什么东西,有疑惑就要扣101或者扣二。

有疑惑吗,都有是吧,当你在有疑惑之前,或者说当你在要路线之前,出现之前,我需要你们先做一件事情,什么事情,这东西,叫定位,你们知道很多定位吗,什么叫定位啊,谁能给我解释一下,目标菜头师,目标是全站。

想搞全站同学,我建议你换一个换换换一个目标好吧,先生东西叫定位,什么叫定位啊,现在啊这个技术太太太多了,明白吗,就是你要学的话,你根本学不过,你根本学不过来,这学起来是非常非常吃力,而且他学习的时候。

他不一定能收到对应好的效果,所以我非常不建议说你真的说把所有剧都学了,但是你一定要有一个定位,定位什么意思,自己处于哪一个水平,之前我有一个vip学生报名了,报名之后让我做规划,规划的时候呢。

说老师我现在年薪14k,年轻时不是月薪14k,我想出明年冲击年薪50万,你觉得可能吗,挺好啊,现在月薪14k,明年冲击年薪50万,你觉得可能吗,太难了太难了,真的太难了,好吧,记住一句话。

叫饭要一口一口吃,路要一步一步走,技术要一个一个学,所以我为什么说你要定位第一任老师,那我现在到底处于初级,中级高级到底属于哪个哪个阶段,我没法去判断啊,很简单,现在国内或者说现在的市场。

市场上面没有一个明确的标准,说你掌握了什么技术,你就是一个初级的掌握了什么技术啊,就是高级的掌握什么技术,就是中级的没有障碍,拼标准,但是有一个标准是存在的,什么东西叫职级,你们知道吗。

当你们接到大考之后,一般情况下是都要有直接评级的哇,最简单的题节举例子,比如说阿里的我们从p5 到p8 ,对不对,这就是最基本的一个直接像你上网搜,你是能看到很多,对于不同职级的一些技术要求的。

进行更更更改的,当你掌握好这些东西之后,你可以对号入座,你自己现在大于位于某一个水平,同学们来方便同学,你可以给我发一下,你现在的工作年限加你的薪水,你能方便发一下吗,我觉得今天晚上大部分来听课的同学。

你们大部分人的就是薪水等级,或者你们大部分职级应该处于一个中级往上,稍微多那么一点点的一个阶段,就可能很少有那种高级这样,一个一个一个一个一个一个水平的学生,因为接下来我讲的东西其实并不是特别难。

它其实属于是一些基础的必备的常用知识,9年16x14,在合肥3年15 6年10万和6。5k实习,刚毕业10k哇,这80k合肥知道吗,是大家发现了,你们其实大部分人其实应该处于的是什么。

是p5 这个级级别什么意思,我能去做一些独立的开发了,我对我们基本的一些框架,比如说s s m对吧,比如说spring boot,比如说spring cod这些基本的应用我是没问题的啊。

基本应用是没问题的,那其实你当你了解完这些东西之后,下一步你就要考虑到我老师我要掌握p6 ,或者说我要达到p6 这个级别,如果你拿到p6 级别,那p6 我应该具备什么样的能力,或者我应该学什么样的技术。

当你聊到p6 这块之后,下一步才是聊什么,聊路线的事情,明白吗,所以不要把这个前后的顺序给颠倒了,很多同学就是因为把前后的顺序颠倒之后,导致你学起来一直处于一个迷茫的阶段,迷茫阶段哦,比较迷茫。

就一定是先搞清楚你自己的定位,就是我做事情一直是这样的,第一步先有一个定位或分析,分析完之后,第二步数据对应的目标,网站的目标是小目标,不是大目标,有老师,我要年薪百万,老师我要领取白富美,别扯淡。

我现在45k,下一份我就要20k,我就25k,这是比较现实的,一上来就我家构师,我年年纪大了,你舍不得我,财富恶龙咆哮,目标28岁,财富自由,这个梦做的有点大啊,并不是达不到好吧,但是比较难。

所以先输入一个小目标,比如先赚他一个亿,是这意思,现有目标,有了目标之后,下一步干什么事,变成这叫制定计划了吗,对吧,当计划完成之后,下一步才是什么东西,就像一件事就落实,张老师,当然这里面最关键。

什么叫定下一个目标,你还没干呢,就定下一个目标,等这东西实现之后实现了,然后再回过头来搞搞定位,搞目标是这样逻辑,你还没干呢,你就跟下一目标干嘛,一点意义都没有,听明白意思吗,你们以后在学习也好。

在干嘛也好,一定要遵循这样的一个路线,这东西我觉得是心理有效的啊,当然这里面最关键是什么,是这个步骤目标,你的目标不要太远大,不要太红的,这辈子都实现不了,不要带这个东西没意义没意义啊,最关键的是什么。

你要树立一个你能好吧,经过一段时间努力之后,你能够得着的一个目标,而不是一个痴人说梦的目标哇,这才是最重要,最最关键的是年龄不是问题吧,年龄又会有问题,但是你要结合你自己的情况。

在最短时间之内达到你想要的东西就完事了,就这么简单,所以把这个东西你要想明白了,不要去抱怨卷这件事情啊,卷是常态,明白吗,你是改变不了卷这件事情的,所以你能做的事情只有一件事,你去改变你自己。

而不是改变卷这个现现状,卷这个行业动态改变不了,明白了吗,你要改变的是你自己,所以当你把这套东西搞清楚之后好了,我们再来聊路线的事情,比如说这个计划的事情,比如老师那p6 应该学什么东西来。

有人好奇p6 要学什么吗,好奇给老师扣个一,有没有好奇,地址不是说年龄大了怎么办,好了,一会儿我们留出点时间,你们把你们的个人情况告诉我,咱们一会简单聊一下你们个人的规划,我先告诉大家路线是什么样子。

路线什么样子好吧,p6 年薪多少,p6 的年薪大概是40万~60万啊,当然前两天我听曹老师说,阿里出了一个p6 的顶薪,大概是90万,p6 的底薪90万,但这个很难了很难了好吧。

它不是一个短期内能实现的目标哦,所以你需要是什么,比如说这个地方p6 他看中的是什么,p心他看中的是什么,你要做到心里有数明白吗,p6 需要是啥呀,其实非常简单,给大家看一下。

这里面其实就对应路线注意了,p6 它针对的是什么叫操作与落地,明白吗,什么叫操作落地,这个操作流落地里面包含了非常多的东西,我们一块合一下,只能把你们吓到了,好吧,这是hero里面。

p6 里面要包含的相关的核心竞争点,和核心知识点,好吧,比如说现在你要想达到p6 的话,你要有一些自己的前置知识,什么叫全日知识,比如s m spring boot,我能做一些独立的开发对吧。

了解一些新特性什么之类的东西是前置知识,我觉得基本上你做开发了都要具备这样的能力,那再往下看,你还要掌握什么,掌握一些底层技术,比如说操作系统的,比如说计算机组成原理的,比如说网络的,比如说i o的。

比如说linux的,比如运维的以及数据结构和算法的东西,这都是你要掌握的必备的一些底层的技术,现在面试他就问这些,其实不单单是p6 ,你在面临一些上规模的公司的这些开发的时候。

中高级职位的时候基本上都会涉及到这些东西,好吧,再比如说并发编程,你要了解操作系统的并发知识队列的东西,内存模型的东西,线程池的并发集合的c s s y local的j u c的,gm i h的。

你都掌握,是华沙等,说掌握的话,要掌掌握到什么样的一个程度,你要能把这套东西形成自己的一套知识图谱,或者说知识体系,不知识体系什么意思,我一样可以给大家看一个东西,这是我们之前vip他自己做的一个笔记。

他在学jvm的时候,他做的一套东西,我给你看一下,你是能描述出来,当你学完一个东西之后,你如果能把笔记做成这样就ok了,在我的评估范围内,我觉得就ok了,在这个学生他学完jvm之后,他自己画的一套笔记。

我做了一个自己的j a m思维导图,如果你能做成这样子,我觉得你就学到位了,就这么简单,还是那句话,你要掌握是什么,同学们永远记住这两个字,叫体系,能懂吗,不是某一个点,不是问到垃圾回收器的。

我知道是个啥,那能不能把那些同学更好,知道是啥,不是这些东西,你要对各个细节你都要考明白,我可以给你放大看,每个地方都是他做的一些详细的东西,看了吗,做的很清楚啊,参数也好,调整也好。

什么东西啊都做的非常完善,非常完整,这才是你应该掌握的哇,你要能形成这样一套东西出来,所以就说当面试官问到你,不管问到你什么技术的时候,脑海里面啪能打开一张图,同年包含了非常多的东西。

他只要问到三观点了,你能侃侃而谈,这才是最主要的好吧,那现在应该很牛吧,确实很厉害确实很厉害哦,所以这才是你们需要学习的东西对吧,这是并发编程这一块,除了之外,你要掌握一些通信框架的一些东西。

比如说reaper里面通信double对吧,r p c的rust thrust和net这些东西都要掌握,用中间件也要掌握,rock mq卡不卡对吧,都是必备的基础,包括像中间件的应用mem catch。

还有这个redis对吧,包括你要掌握一些软件设计的,一些基础的理论知识,是设计模式,软件工程了对吧,敏捷开发了对吧,一些文档的案例编写的都有,包括你们的分布式架构实践,分布式架构时间。

不单单里面包含了什么分布式事务,分布式锁,分布式id了,不单单包含这些东西,还包含了一系列上分布式密度,分布式绘画,分布式任务,分布式权限控制,分布式预警系统,分布式链链追踪等等东西。

都是你要进行掌握的把,包括你要掌握到微服务对吧,注册发现了网关,路由了服务调用了负载,集成了nfx阿里巴巴的多少物对吧,以及性能调优的cfm调优mysql调用,他们看调用,但这个调用对吧。

海量数据存储的对吧,e的培根house messl news,太dd的,对不对,包括我们搜索e的,对不对,包括像海量数据处理的一些东西,flink还有很多东西,包括像运维的,你要了解一点啊。

di要了解一点,然后测试的你肯定要稍微了解一点对吧,service nt东西了解一下,所以这些东西都是你要进行储备的,明白意思吧,你说如果你想达到p6 这样的一个,技术实力的话。

那么这些核心点就是你要处理的东西,学校做的同学给老师扣个一东西多吗,那你们觉得多多多吧,很多吧,这些东西你都需要学习吗,你需要把所有的东西都一口气学完吗,需要不需要,我告诉大家。

如果谁想着我要一口气把这些东西学完,我觉得你肤浅,为什么技术这东西它是没有边界的,明白吗,你今天学完一个东西,明天可能出一些新的东西,你永远学不完,那你要学的是什么东西,学的是啥东西。

掌握你现在必备的基础,那么你可能会疑惑,老师我现在必备的是啥,这里面有你一点都不会的吗,有没有你现在一点都不会了,你能不能抓紧时间学,能不能从这些模块里面挑一些东西拿出来,优先去学习,能不能。

这是没问题的对吧,你能不能给自己规定一个时间轴,就我刚刚说的,我这一生的目标或这一个月的目标,我要把什么,我要把并发编程搞定,下一个目标,我要把中间键搞定,下一下这个目标,我要把什么东西搞定。

能不能做这样的东西,不怕你不干好吧,就怕你什么,就怕你们瞎干,盲目的干明白吗,所以当你这个东西给到你之后,你能不能有明显的一个路线或大纲,在当你有这样路线之后,你一块一块学不行吗,好吧,虽然说可以。

但是不知道选哪些,不知道选哪些,也非常简单,也非常简单,怎么做,我告诉你第一路线给到你了,你从这个路线里面诶,我问一下,有人想要这个路线吗,想给老师扣个一,有人想要的,谁如果想要的去找咱们的班主老师。

找他们去领取扫地的二维码和扫码器进行领取,能明白这意思吧,上面进行领取,如果你之前加过咱们任何一个咨询老师,找他领取,也是ok的,也是ok的,明白意思吗,好吧,我要说的是什么,当你有这东西之后。

你可以自己从里面选择一些你不会的点,但这是一个方式,除了这样的方式之外,还有什么方式,我再解释一下,还可以干一件事,你找一个领路人,找一个你的师哥师姐,找一下你的一个领导,让他来根据你个人的技术实力。

帮你从里面能不能提取出一些关键的点,你们这样的人,如果这样的人也没有的话,那我告诉你,你就需要报名马士兵教育的课,什么意思,你不知道没关系,老师知道我们会告诉你一步步你要怎么做,懂我意思吗。

啊拿到了和人最差了好多差就对了,人不怕自己说我现在混的差,而最怕什么,最怕不知不自知,明白吗,就我不知道学什么,所以你要掌握是什么东西,把这些关键的核心点,你要知道我哪儿缺乏了。

我要把什么技术给弥补起来,这才是最主要和最核心的关键点,听明白了吗,所以如果需要的话,整体设计领取好,详细看一下东西,我说的东西很多,但不需要你,你你每个挨个都选一下,有老师可以帮你。

慢慢的捋出一条适合你自己的独特的路线,而且每个人的目标是不一样的,所以你每个人需要储备的技术,也不是也是不一样的,如果你真的把这些点都学会了,在p6 级别里面,你真的可以拿到顶薪,明白了吗。

顶薪难度最高,这个东西完全不夸张好,这才是你要储备的,这只是p6 这个职级,这个级别你需要储备的,有人想看pc吗,想看pc的,给老师扣个一,想看吗,就pc我要掌握什么样的技术实力。

这是p6 的p6 强调的是什么叫操作与落地,pc小调,什么叫原理与设计,这里面我们依然包含了一系列的东西,好吧先合一下好吧,然后什么第一个叫分布式设计的理论基础。

这里面包含了一些像c a p的puzzles了,rap了啊,该s i p到这样的一些协议,第二个你要掌握一些核心的算法,分别是架构相关算法和机器学习算法,第三个你要掌握一些框架的原理,什么血压桶呢。

my best is对吧,他们看到这个cd m cute net hosports e l k,你都需要掌握这些东西啊,包括有一个高性能架构设计,什么叫高性能架构设计,比如说分流设计怎么做。

服务并行并发怎么做,缓存设计怎么做,存储设计怎么做,可靠性设计怎么做,并用保护设计怎么做,多位了解,再比如说下面还有一个案例驱动设计,我们这里面提供了一堆的项目设计的课程,比如说每秒数是每秒数10万。

超高并发通用设计专题,有一堆的案例告诉你怎么去设计好吧,应该有什么技术键技术站进行相关的一个搭建,比如说有n个九全链路,高可用通用设计专题对吧,有云集百万年薪好吧,案例驱动式架构设计专题对吧。

有我们的一级流量,多级缓存的架构设计专题,这里面我们更多承受,就不单单是那些比你基础的技术实力了,或基础的一些应用了,更多强调是什么,就是我们整体的架构设计能力了啊,这才是你能拿到pc这个级别。

最最最重要和最最最最核心的关键点,明白意思吗,除此之外,这只是p7 的,这边还给你搭配了一堆的项目的课程对吧,有一些用户中心的,有一些架构设计的,比如说我们有一堆项目课。

有一些网多人在线网游服务器的对吧,东方商城的有没有飞机出行的,有推推荐的,有刘诗云平台的对吧,这都是你要讲的相关的核心点,讲数据库连接池了吗,讲了数据连这最最基础的内容嘛,肯定要讲了。

包括有人说老师我现在技术学完了,我需要准备面试怎么办。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

没关系。

系列 6:P88:事务的四个特点是什么?他们的实现原理是什么? - 马士兵学堂 - BV1RY4y1Q7DL

来先聊第一个问题,mysql事务,mysql的事物它有几个特点,结合点,谁能告诉我,四个吧,我觉得所有人都能说出来,叫a c i d,对不对,它们分别对应过来的特性是什么特性,第一个叫做原子性对吧。

第二个把这个字调大一点,第二个叫做一致性,第三个叫做隔离性,第四个叫做持久性,这几个东西啊,我觉得大部分同学你只要在接触数据库的时候,都会学习这几个点,但是这个东西不是我之前想讲的重心。

我想讲的重心是什么,这四个特点,它们分别是用什么样的方式来进行实现的,也就是说实现方式是什么,好吧,一定要做到什么叫知其然还要知其所以然,这件事很重要,什么叫实现方式,也就是说我们的实现原理是什么呢。

他通过想要的方式来进行保证的好吧,那先说第一个吧,原子性啥叫原子性来着,什么叫原则性,就要么全部成功,要么全部失败,是不是这意思好吧,那我怎么保证它啊,其实成功的话非常简单,我数据直接更新成功就可以了。

如果失败的话,我是需要进行回滚的,那我怎么样能够把数据给回滚回去呢,这里面其实涉及到一个问题,什么问题,同一个事物里面可能会包含12345,n多条的sql语句,这n多条sql语句里面。

前三条我可能已经执行成功了,但第四条和第五条执行失败了,一旦失败之后,我前三条执行成功的sql语句,也要回滚到之前的历史版本里面,那我问一下,如果让你自己来实现这个东西,你会怎么实现。

就你自己会怎么实现,是吗,其实你可以做一些思考吗,我只要能做一件事就可以了,我保留着我之前的数据的历史状态,如果我没有提交,我的历史状态依然保持着,当我需要回滚的时候。

我是不是可以把我历史数据重新拿回来,回放进去不就完了吗,是不是这意思好吧,所以这里面是什么样的一个方式,注意了,我先说它底层的实现,基本原则性是通过什么来实现呢。

是通过一个东西叫undo log来进行实现的,来知道undo log的扣一,不知道undo log的扣二,好了,有很多同学不清楚这玩意儿,不清楚这玩意的话,我们来说明一下mysql里面的日志。

专门聊一下这个日志系统,你们在日常开发中啊,其实日志用的也是非常非常多的,在mexico这个图里面,或者msl这个竞争里面,它也包含了非常多的日志,比如说我们比较熟练的日志有哪些啊。

第一个比如说blog,你们是知道的对吧,这个用的是最多的对吧,除了blog之外,第二个刚刚提到的read on the log,除了on blog之外,还有什么,还有redo log对吧。

以及还有很多同学说老师还有这个东西叫error log,错误日志吗对吧,还有什么,slow log慢日志吗,对吧,还有什么,relay vlog r e l a y logo,有人在这里面。

它其实包含了屏幕不动了吗,hello,hello,屏幕不动吗,能看屏幕吗,应该是应该是用浏览器的同学卡了,你们把那个浏览器刷新一下,好不好,把浏览器刷新一下,刷新一下,你在这个地方我写了一堆的日志。

一堆的日志,这件事里面有些用的比较多,有些用的比较少,挨个给大家解释,第一个vlog,它叫什么呢,叫做中继日志,中介就是这个东西啊,是在主从复制的时候用到的,暂时你可以先不管它,或者先不了解他。

在主从复制或主从同步的时候,会用到这玩意儿是吧,这个叫slog,叫慢日志吧,也就是说你在你的数据库里面,经常会开启慢查询,当一个sql语句执行时间,超过某一个限定的范围的时候。

会在我的slog里面记录条日志,我可以根据这个日志来判断一下哪条思路,语句执行的比较慢,那么来进行相关的一个调整对吧,这个这个叫erroid,什么意思,错误日志吗,在整个mysql执行过程中。

如果某一个呃操作出错了,会进入到所有errolog里面去,就这几个,这个我觉得还是比较容易或者比较好理解的啊,上面这三个我需要重点给大家解释一下,这是我们今天要聊的比较多的东西,为啥删掉不删掉就留着嘛。

无所谓了,写写下错误日志,慢日志好吧,留着留着留着,你们说留着就留着,什么时候出现错误日志,你程序出错的时候就出现嘛,对吧,这有啥,下面我要聊出去聊这三个东西啊,这三个东西上面这三个给我们今天讲的课程。

关联度会比较高一点,第一个blog blog叫什么叫二进制日志文件好吧,他在mysql里面默认是不开启的,但是我建议同学们不管是你自己练习也好。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

还是生产环境里面也好,最好把冰冻保存开启,因为它能够帮助我们进行数据同步以及恢复,这事很重要,也就是说当你有了blog之后,哪怕你的数据丢失掉了,我也can you。

可以根据我们的blog把数据给恢复回来,好吧,下一个叫undo log,什么叫undo log,它的名称叫做回滚日志,回滚日志是吧,还有一个relog,它叫什么叫前滚日志,这当做自己取的名字啊。

前滚这是一个回滚,一个前滚,他俩其实相相对应的,相对应的,那我想说的是什么,一会儿我会重点解释一下undo log和redo log,他们两个的实现机制是什么,但是我这要强调一件什么事。

同学们一定要注意了,我们的blog,昨天我给大家讲解过mysql相关的一些架构体系了,那这样我要说明的是一件什么事,情,注意blog它归属的层次是谁,是massive的server层。

而我们的undo log和我们的resulg,它并不是存储在masl server层里面的,它是属于哪个呢,它是属于in no db这种存储引擎里面去的,这是它们之间的区别。

一定要知道它在哪一个层次里面去生效,所以我们昨天今天我们讲事物吗,mason它是不支持事务的,但是inno db是支持事务的,所以这两个东西重点的时候就聊inno db相关的,合适点,能听明白吗。

来我现在讲的这些东西能理解的,给老师扣一,能理解吗,好了这些都能理解的好,我来回答出来,那它到底是怎么实现的呢,其实非常简单,我刚才已经说过了,如果我们想进行回滚的话。

我如果保留了我之前某一行记录的某一个,历史状态或历史版本的话,在我没有提交,或者说我失败之后,能不能恢复到我上一个历史版本的状态,能还是不能能不能,就我考的历史版本吗,有个历史版本之后好。

我回复回去不就完事了吗,就相当于你们在操作系统里面,或者你们在做一些呃备份的时候,是不是有一个时间,是不是有一个the time step的东西,你是不是不是tesp有个叫快到的东西。

是不是可以恢复到某一个历史时间状态,把数据恢复回去,特别是在虚拟机的时候,是不是快到,这东西就相当于是一个快照的一个组件点,当然很多东西啊还不太了解,underdog里面到底包含了什么样的一些信息。

一会儿我会通过画图的方式,给大家做一个完整的描述,你记住原子性是通过undo log来实现就够了,这是第一个好吧,那么第二个我们的一致性先扔一边,我先说隔离性,隔离性是通过什么实现,什么叫隔离性。

其实也非常好理解,比如说在并行运行的各个事物,它们之间相互独立,互不干扰啊,对不对,也就是说我一个事物在运行着,另一个事物,不能去影响我当前正在执行的这个事物,那这东西我要怎么来实现呢。

其实这里面涉及的更多的是并发相关的一些,基本操作吧,你想我该怎么做,让你自己来,实际上话你会怎么实现,好了松饼说了一个字,叫锁,确实是通过锁的机制来进行实现的,但是这有一个问题,同学们。

如果我给我们的事物加锁,会给我们的数据加锁之后,加锁之后的效率是高还是低,听到问题,加锁之后的效率是高还是低,低是不是要低,马老师之前讲事物的时候,经常讲述的时候,经常说,当你一个人上厕所之后。

他必须要等你出来之后,你才能接得上,是不是意思效率比较低,但是遇到我们这种大型的,或大量的并发处决的时候,如果我全部加锁的话,很明显效率是比较低的,因此在隔离性这块它除了用锁实现之外。

还会包含另外的一个技术点,叫做mv c c,什么叫mv cc,它的全称叫多版本并发控制好,music version control c control,这意思是叫mc s v cz啊。

有多少同学在之前面试过程中被笨到过,给老师扣,一有人面试中被问到过吗,你有没有啊,应该有吧,反正我们的vip问过我很多次这样的问题啊,所以我把这个mv c c给大家做了一个,非常非常详细的讲解。

你们之前可能有很多同学从网上搜过一些帖子,关于mc c的,但是啊我也看过一些帖子,我觉得里面说的东西并不是特别完善,所以一会儿我会拿出大量的时间来讲解mv c c,它对应的底层实现机制。

比如mv cc会成为我们这节课的重点,包括我昨天在留的那个作业里面,最后一道题想要了解的,会要讲解的也是mv c c相关的基础知识,好吧,它一会儿我们再放一边,一会再聊,它是最后一个。

还有一个东西叫什么叫持久性,这东西19年什么意思啊,19通过什么来实现,之前收到的一个名词叫做redo log,a good log,什么意思啊,这里面啊其实要保证一个机制啊,我问大家一个问题啊。

我觉得卖家问题之后,你们应该会引发大家的一些的思考好吧,首先我们的数据是存储在磁盘里面去的,当我需要去更新某一条记录的时候,这个更新的操作执行的效率是高还是低啊,听到这句话,我们现在数据是存储在磁盘的。

当我需要去磁盘里面更新某一个数据,结果值的时候,它效率是低还是高,第一把为什么低啊,这里面涉及到我们对应四川数据的一个,寻址过程吧,选址的时候他效率是非常非常慢的,非常非常慢的,但是你要去思考一件事。

同志们什么事考虑好了,我每次我在进行更新操作的时候,更新操作的时候,我需要把数据从磁盘读取到内存里面去,我现在内存里面发生对应的修改,内存里面先更新完成,更新完成之后,它会变成脏液,变成商业之后。

我需要把内存里面的数据,刷新到我们的磁盘里面来保证数据的一致性,假设我在进行寻址的过程中,突然mysql挂掉了挂了,如果mysql挂掉了,我问一下这条数据,他还没来得及写磁盘。

那么这条数据是成功了还是失败了,成功还是失败,失败了,那市面肯定不行啊,你说你msl换了老师,我重启,当你重启之后,你怎么样能够保证我能够把数据给恢复回来呢,能保证吗,不能我说过了。

这个往c盘里面更新数据是非常非常慢的,你没办法把它进行相关的一个恢复,所以此时就有了relog这样的一个东西啊,在讲主义log之前,我还是要说明一件事,什么叫有报告,它也是存在磁盘里面的一个日志文件。

比如说我每次在往磁盘里面写数据之前,我需要先往日志里面写一份,然后我再往我对应的磁盘的数据文件里面写,这就会有一个问题,你们会有疑问,老师我既然他也要写一份文磁盘,我的实际数据也要写一份磁盘。

那为什么我要它来保证我们对应的数据呢,我对应了我们数据的完整性呢,写数据不需要浪费时间吗,为什么呢,这里面一样的也涉及到了io的问题,什么io我们在进行读写操作的时候,其实分为两种基本操作的i o操作。

一个叫做听好了,随机,io还有一个东西,还有东西叫做顺序io,这个随机io和顺序啊到底代表什么意思啊,啊什么叫顺序,什么叫随机,比如说我有一个非常庞大的文件,是文件里面有11条记录。

现在我要去里面更新某一条记录,是不是相当于我在这些文件的某一行或某一个,位置里面进行修改,那此时我需要干嘛,我需要想找到这个位置,我才能够去写,光寻找这个过程就会浪费很多的时间哦,这东西叫什么叫随机。

l还有另外一种叫什么叫顺序l,什么叫顺序l,我直接不管你当前文件里面,我存储了多少数据了,我所有新增的数据都直接往后面进行啊,p的操作啊,碰到什么意思,什么叫分的追加吧,要是我直接往里面追加。

和我在中间某一个位置里面进行插入,你觉得哪个效率高,哪个效率低,那个那个b肯定是按p的高嘛,是不是这个意思好,可以这样看得到顺序的,它的效率是比我们随机要快很多的,之前也看过一个帖子。

帖子里面是这样描述的,revlog redo log,我觉得这个描述也非常准,非常准确啊,我给大家说一下,举个例子啊,vlog它相当于干了一件什么事情,举例来说明,听好了,假设啊你干了10年程序员。

到30岁之后,存点积蓄,有个一两百万是吧,一两百万之后感觉不想在北京混了,回老家了,回老家之后你也不知道干别的,不知道干啥,在你们村里面开了一个饭店,开饭店之后你要考虑一件事情。

村里的人呢都是左邻右舍好,或者说都是亲朋好友,这时候一般人来吃饭,他其实是不会干嘛,直接结账的,他一般会赊账,那3万的话,就意味着,你自己一定要有一个非常非常厚的账本。

账本里面一定记录了非常非常多的一些数据,当某一个人过来赊账,或者说比如说吃完饭了,他说哎小二来给我记一下账啊,我月月底的时候一块截给你,你如果去当前这个非常厚的账本里面,你去找到对应的这个人。

在进行对应的数据修改的话,你告诉我效率低还是高一汉高,肯定很低吧,因为你要找嘛,我说了很透的账本,很多很多肯定是非常低的对吧,那这个时候大家想,如果你是饭店里的生意比较惨淡。

一天可能就两个人来吃饭也没关系,我们玩转嘛,时间是来得及的,假设在中午或者晚上的时候,客流量非常大,来吃饭的人非常多,记账的人也非常非常多,这个时候你去账本里面找,你觉得还来得及吗,肯定来不及了。

一堆人等着排队买单,你肯定是来不及的,那这个时候怎么办,你能不能在你在前台上面,或者在你的柜台上面,你挂一个比较小的黑板,黑板是干什么意义的,当一个人需要来赊账的时候,你就让他赊市场所。

你并不是去账本里面进行相关的数据修改,而是把当前这个人的信息你进入到黑板里面,来一个人记录一条,来一个人记录一条,来一个人记录条,一直往黑板里面进行追加,当中午的客流量高峰过去了,你比较空闲了。

闲了没事干了,能不能再慢慢的把当前这个黑板上面的数据,再重新写到你自己的账本里面去,能不能可以吧,你觉得往黑板写和去账本里面找哪个效率高,哪个效率低,是不是肯定要往上面来写,效率高一点,明白意思吧。

所以relog就相当于做了这么这么做这么一件事,当我有数据来了之后,我先写到redo log里面去啊,哪怕我账本里面数据没有更新也没关系,将来有时间了,我把我revlog里面。

或者把黑板里面的数据慢慢进行一个誊写,而不需要花费大量的时间,去账本里面找具体的数据来进行数据的更新,这是我们revlog存在的一个意义和价值,来这个redo log听明白,同学给老师扣一,能听懂吗。

胡巴没听懂没听懂,说哪个没听懂,对呀,这是它存在的意义和价值,一定要把这个逻辑关系搞清楚了,一定要搞清楚,这点很重要很重要,因为在行进行实现的时候,里面有个东西叫clash safe。

它就是用来进行数据的一个存储的,对不对,就是为了解决我们class safe这样一个问题的哇,实时性咋办,他不需要什么实质性,还是那句话,我们为了房子是什么事情,如果你能找得过来,你当然是找了。

如果你找不过来怎么办,听到这个问题啊,如果你找不找得过来,没问题,你可以找,就这意思啊,你往磁盘里面写的时候,如果你能写进去,没关系,你就往里边写,如果你写不进去,突然断电宕机了,你怎么办。

你黑板在你的数据是不会进行丢失的对吗,是不定式的,并不是说我写到redo log里面去之后,我就不往我的账本里面写了,我依然往我的账本里面写,或者我依然进行数据的一个同步,只不过我是为了保证我中间。

这个过程出现问题之后,我能够进行数据恢复的,是这意思,明白了吗,哇放大说redo log会整理数据吗,它不会整理数据,redo log它有一个东西叫什么叫循环写,比如说vlog是什么。

是一个固定空间的文件,固定空间的文件,它固定空间,这意味着我一直往后面进行追加,假如说我追加完成了,这下完成了满了满了怎么办,会把我之前的数据给干掉,干掉之后我依然进行循环写,那这时候就不要问了老师。

如果我的relog我没写成功怎么办,如果relog是不是,如果你的redo log也没写成功,你实际的数据文件也没写成功,那数据丢了就真的丢了,就会产生数据丢失的问题,明白了吗,就产生数据丢失的问题。

这也是没办法的是吧,任何数据库,你不可能严格意义上,从任何一个维度解决他数据丢失的问题,是不可能的,所以他只是有这样的一种机制,明白吗啊那这时候有同学问老师,你刚刚提到了redo log和blog。

他们一个位于server层,一个位于的是印度db存储引擎层,他们两个位于层次不一样了,那我在记录了redo log之后,我的blog里面还是否会进行记录呢,挺好啊,如果我记住了redo log。

我的blog里面是否还会记录数据,会不会,会吗,会的会的,也就是说你的blog和你的redo log边都会记录数据,如果都会进入数据的话,那么会有什么问题吗,啊干饭魂,听好了,会员啊。

blog和redo log里面都会同时记录数据,当你同时记录数据之后,会有一个问题,什么问题,我是先写re redo log,还是先写blog,先说好,听到的和redo log都会同时记录数据。

好那么他们记录的顺序是什么样的,你告诉我,就是说我到底先写谁后写谁啊,现在blog啊,现在人都log,这个问题记住了,它是一个坑,不管你先写锐度还是写病都有问题,都有问题。

所以在这里面会涉及到另外一个问题点,在面试中问的也比较多,什么东西呢,这二两阶段提交这东西啊,不是分布式事物里面那个2000的提交,它就是2000的提交,比如说blog和成都log。

要保证他们两阶段提交这件事情,其实一个另一个没有写吗,注意了,你两个日志数据里面要不然都写,要不然都不写,如果说一个写了一个没写,你要判断一下它到底能否生效,或者你的数据到底是否最终是一致的。

这点很重要啊,所以这是刚刚我在ppt里面列的第二个问题,什么第三个问题说什么是二阶段提交,如何保证当机时数据的一致性。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

我刚刚说过了,redo log,它是为了记录或者为了阻止,反而是safe的存在,你说我如果在中间的过程中断电了怎么办,我可以根据我们的工作log来进行数据的恢复,对吧,冰老师干嘛的。

它是为了进行主动复制或者进行数据恢复的,还有数据恢复的功能,他两个在进行操作的时候,两个日志会同时写,就意味着我在进行恢复的时候,要根据两个日志来判断,那这里面就会存在一个问题,我到底先写谁后写谁。

欢迎再打一张图给大家看一下啊,之前我讲过这个东西,来给我看一下,来看这张图,这是之前我在讲vip课的时候,给大家画一张图啊,大家看一下,比如说当我在进行数据更新的时候,它是包含这样一个更新流程的。

第一步我要先获取数据,获取数据的时候,要判断一下当前数据是否在内存中,如果没有的话,我需要把磁盘里面的数据加载到内存里面,然后我要去修改我们的数据,同时要写入新的数据,写写程序的时候一定是先写内存。

写完内存之后,我才会往磁盘里面投放在这里面,我在写这两个日志文件的时候,分为了三个步骤,就下面这三个步骤会变得很重要,第一个步骤他怎么做的,叫先写redo log,处于prepare状态。

然后再写blog,然后当你提交事务的时候,我再把我们刚刚的图片状态置为commit状态,所以这时候你就要考虑清楚一件事,他为什么要进行这样的设计,或者说这样的设计它到底有什么样的好处,他保证了什么事。

其实你可以做一个思考,其实你可以做一个思考,什么思考。

系列 6:P89:MySQL的redolog、undolog、binlog分别有什么作用? - 马士兵学堂 - BV1RY4y1Q7DL

刚说的东西,假设两个日志啊,我明确了都要记住,我如果先写redo log进行,然后再写blog对吧,建议大家写写他这样两个方式,如果再这样写的话,这里面会有一个问题,同学们听好了,什么问题。

如果我写完redo log之后,突然啊写完do log还没来得及写vlog的时候,我突然断电了,这时候会发生什么情况,解压,当写完redo log没有写完blog的时候,会有什么情况发生。

你觉得会有什么情况发生,注意啊,我的revlog里面写完了,写完之后,我一定会把它一写到我们磁盘里面,就算我在一写磁盘的时候突然断电了,我的road log里面只要有数据或只要有对应的记录。

那么我是可以根据redo log来进行重启的,但是你要考虑一件事,你写完的redo log,你的blog里面是不记录对应信息的,那这个时候假设你有两台机器,a的操作,a机器和a服务a数据库是吧。

然后b数据库,是通过什么blog来进行数据同步的,此时你考虑清楚了,当他写完了,他没写完,你的b数据库在同步数据的时候,会不会代表这一条数据会反而不会,对位,不会如果不会的话,就会出现一种情况。

什么情况,你的a数据库里面已经做完了这条更新操作,但是你把blog同步到b机器的时候,你的b机器里面并没有这个操作,你告诉我你ab两个机器里面数据还一致吗,一致位置了,不一致了吧,那不一致。

你的主从同步不就失败了吗,不就存在对应的一个问题了吗,是不是这意思啊,所以它是不可以的,不能先写日志log再写blog,那其实反过来道理也是一样的,如果我先写了blog,然后后面我再写我的logo。

这种情况一样的吧,什么叫一样的,想好了,我先写完blog,然后没有写完redo log,这时候是什么情况,你blog里面记录了对应数据,blog记录了对应的数据,是b机器,我b服务器b已经将数据同步。

但是redo都没有,此时如果出现了凡是safe,或者说如果出现了断电,出现断电之后,你告诉我,你能够根据blog把数据给恢复回去吗,这个问题啊,你当你断电之后,你能够把你根据blog把数据给恢复回去吗。

能不能,不能吧,你连数据嘛肯定会受不了,他恢复不了,意味着a g g是a的,数据是有问题的,少一条,但是你的blog已经同步到b机器里面了,b机器里面是不是会多一条记录或多一个操作。

此时你的ab两个里面的数据还一致吗,一致位置,这又不一致了吗,是不是这意思啊,所以不管你先写日blog还是先写blog,它都是有问题的啊,所以这种机制有问题,因此才诞生了,我刚刚给大家展示的东西。

什么呢,叫两阶段提交,什么意思,我先写redo log,只不过此时我的redo log,它处于的是叫prepare这个状态,然后我再写blog,当我把blog写完之后,我事务提交了。

我再把我们的redo log置为commit状态,那在整个这个执行过程中,依然在任何步骤的时候,都有可能会出现断电情况,比如说这儿如果断电了,可以了,听好了,这如果断电了,当这断电之后。

我需要做什么判断它的运行机制是这样的,听好了,如果在此处出现断电了,那我在恢复的时候,我会先检测我的revlog,我只do log里面状态,我简称log之后发现当前的relog属于普片状态。

当它处于普片状态之后,我再去blog里面找对应的数据,比如blog里面是否同步记录了与之相同的操作,如果有,如果有,那么此时把刚刚review里的prepare状态,改成commit状态,如果没有的话。

干什么事,把刚刚redo log里面的prefer,这条日志直接置为失效,我直接认为无效数据,这样的话,我的real log和我们的blog能不能保持保持数据一致,可以吗,这是刚刚这个断电的过程。

那样吧,在下面这个步骤里面,它也很不断电,当它断片之后一样逻辑,我先找一个log,我一找诶,发现一个log里面有图片状态的数据,这时候我在找blog里面找,我一找blog。

blog里面是不是有对应的记录,有对应记录怎么办,把刚刚的prepare状态的数据改成commit状态,这样的话两条数据记录都保持了完全一致,所以不管你依靠哪个数据来进行,数据恢复的时候。

他都不会出现数据的不一致性的问题,这东西就称之为叫两阶段提交,这东西p班同学给老师扣一,能听懂吗,所以啊这东西在面试中也会经常被问到,你要给面试官把这东西给讲清楚,它对应它对应的东西。

老师redo和blog pupa团队的方式能替换吗,不可以,因为blog他没有prepare这样一个状态,blog没有prepare这样一个状态,没有prepare一个状态好吧。

所以他不可以互换位置好了,这个两阶段提交这东西我做了这么多,所以当提到这个logo的时候,你要把blog整合起来,了解一下它的两阶段提交就可以了,vlog在sl单链中还有吗,它是持久化到磁盘的。

怎么会没有呢,它是持久化到磁盘的,所以一定是有的,注意断电之后数据丢失的话,只会把内存里面的数据也丢失掉,你磁盘里面的数据是不会发生丢失的,所以不用担心这件事儿,好吧好了,刚刚我解释了原子性。

通过undo log来实现隔离性,通过mv c c加锁来实现持久性,通过relog来实现,但是我唯独没有提一个东西,就是我们的一致性,这里面我要强调一件事,同学们听好了,这里面我们写一句话,记住了。

为什么一致性没有写具体的实现方式,这边有很重要的一句话,一致性是我们根本的追求,一致性是实现,方式是由其他三个特点来保证的,明白意思,也就是说它没有什么具体的实现点,其他三个特征共同保证了我们的一致性。

问题来这儿能听懂,同学扣一能听懂吗,赶快记一点好不好,当这些问题都聊完了之后,下面我们进入到一个环节,什么环节,我们就要讲一下我们的mv c c这玩意儿啊,重点聊一下m c的这玩意儿。

m c c坦白说还是有那么一丢丢复杂的,好同学在了解m c c的时候,其实怎么说理解的都有多少有点有失偏颇,那今天我们重点把nv acc对应的实现机制,给大家讲清楚啊。

m v c这玩意儿m c刚刚不是多多,我都说过了啊,现在了解奥特fm v c c刚刚解释过了啊,什么叫mvc c,它的翻译是什么线程锁吗,不是跟县城所没有关门的关系,它叫做什么叫多版本并发啊。

这它对应的一个全称啊,既然涉及到并发了,那这里面会有一个问题,同学们数据库里面的并发大概分几种情况,听好了,数据库里面的并发大概分几种情况,这是什么,有多个事物在进行同时操作的时候,有几种情况。

三种哪三种啊,第一种叫读读是吧,第二种叫读写好,第三种叫写写,这都是我们产生这种并发读取的时候,要产生的一些操作,比如说同时读都是读还是都是写,还是有读有写啊,这样的一个这样三种情况。

那这样的情况我们要解决问题什么问题,这三种情况在进行并发操作的时候,它会有对应的问题吗,比如第一个读读会有数据安全问题吗,他需要进行并发控制吗,需不需要不需要不存在任何问题,也不需要并发控制。

因为你在进行数据读取的时候,它并没有实际的改变我们的数据值吧,所以不需要了是吧,那第二个读写会有问题吗,有吧有数据安全问题,幻读不可重复读啊,都是这种各种机制里面它要存在的一个问题啊,这东西还有第三个。

写写写写会有问题吗,有没有有有数据安全问题啊,可能存在丢失而叫更新丢失问题,就说是存在这些对应的一些情况的,当存在这些对应情况之后,我们总要考虑解决方案,对不对,在考虑解决方案的时候。

你就想什么解决方案,最普通的方式我可以通过锁的机制来实现吧,比如说加速锁是可以解决这个问题的,但是我在使用锁的时候,明显有一个问题是什么,效率低吧,是不是效率低啊,那如果我想保证我的效率足够高。

我应该怎么办,怎么做,换图的问题,一会来解释,别着急好吧,锁它的效率一定是很低的,但是这个时候你可以联想一下,你之前在java那种并发编程的时候,java里面在进行并发编程的时候。

你除了可以加那种cd带子这样的一些锁之外,还可以干什么事,好了,话费提成说的一个东西叫c a s cs叫什么,叫compare and sweep,其实我们的mv cc类似于这样的机制。

就是说他不需要去进行加锁,当然在mc里面它并不是进行对比的,只不过它减少了我们所对应的一些存在的问题,就是说它是用来解决加锁这样一个问题的,明白意思吧,跟cs不一样,但类似的机制是一样的。

类似的机制是一样的,那到底它怎么实现呢,实现的方式非常简单,刚刚有些同学提到了格林级别,隔离级别的东西,我希望同学们能够一会儿再聊,我们一会再聊隔离级别相关的问题,先扔一边。

等需要聊的时候再来隔离一边不需要聊,先不聊它好,在讲mv c c对应的实现原理之前,我需要同学们先具备两个最基础的概念,第一个概念叫什么叫当前读,第二个概念叫快照读,比如说你必须要把这两个名词搞清楚。

什么叫当前读对了是啥意思啊,是不是当前读记住了,所谓的当前读,表达的意思是说在进行数据读取的时候,读取的都是最新的版本数据,记住啊,这最新的版本数据啊,而且在读取的时候,还要保证其他并发事务不能够修改。

我们当前的这些记录,会对我们读取的机构进行加锁操作,这叫当前读,除了当前组之外,还有第二个概念,叫什么叫快照读,那什么叫快照读啊,一个人读最新的数据,那快要读读啥,读什么,对读取的是历史版本的数据啊。

是有可能读取到对应的历史版本数据的,好吧,那这里面会有一个问题,老师什么样的操作会触发当前读,什么样的操作会触发快照读呢,注意了,这样说明一下,我们当前读触发操作有以下几个,写一下,第一个。

比如说sl lock in shell model,什么意思,加读锁吧,比如说select for update加解锁吧,比如说我们执行的update操作对吧,d类的操作对吧,包括音色的操作。

像这些操作在进行操作的时候,都都都基本上都是当前读光线图,它变成快照读,那什么时候会触发我们的快照读呢,也非常简单,它有且仅有一个什么东西呢,叫select,注意。

最普通的select有可能触发的是我们的快到数据,而不是我们最新的数据,有人有这样的感受吗,就你读到的数据是旧的数据,有人这样的感受吗,你之前在操作数据库的时候,有读到过旧的数据吗,有没有。

想想回忆一下有没有,如果你说没有,那么我就要给大家举例子了,好如果你说没有调举例子了,橘子来看一下它到底是什么样的一个情况。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

已经算相,但还是旧的,是这样的情况,来看好这个例子啊。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

下面我来举例子说明了还是一样,我们不可能光讲理论知识,还是要带点实操的好吧,let’s go,boa杠p,我来演示一个场景。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

你来告诉我对应的关掉了,我来演示一个场景。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

你来告诉我,对应的答案和对应的效果分别是什么,认为很重要好吧。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

来了两个窗口同时进来。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

mexico杠u root杠p123456 。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

进来进来之后,我们use demo这个数据库,然后呢在里面我去创建一张表,grade table ut 18连接方案。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

90的id int primark。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

内部卧槽。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

这个sql已经足够简单吧,我觉得这个sql语句有人看不懂吗。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

没有吧,足够简单了啊,然后insert into t18 values。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

写这个值一根号一。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

三好了,往里面插入了三条,结果三大将from t18 没问题吧。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

这边也是一样的,select。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

七from 718。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

两边数据一样不一样,告诉我两边数据是否一致,一样吧,没有任何的一个区别好吧,下面我要做一些最基本的操作了,第一个操作是干嘛,我们为了模拟事物的一个执行过程,或者执行情况。

我需要把自动提交事务的按钮给关闭掉,所以叫set auto commit等于零走。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

然后commit一下,我现在把事务自动提交给关闭掉了,当我关闭掉之后,我为了模拟两个事物,a b是两两个,这是两个窗口,一个a一个b,那么我能不能手动的去开启我们的事物啊,我能主动开启事务吗,可以吧。

两种方式,第一种start的反击是第二个begin。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

我依然执行begin操作,当我开启事务之后,我的问题来了,同学们,现在我开启了一个新的事物,两边数据是否一致,你这个意思你知道吧,这个没啥问题啊,肯定是一致的,如果一致的话,我们就要考虑一件事。

我在第二个窗口里面,我做一个up不对的操作,比如update t18 set name等于连,然后结束,我现在更新完成之后,两边的数据是否还一致,现在一样吗,有人会说老师应该不一样吧,为什么。

因为你从右边窗口里面是我没提交,我现在把它给提交掉,我的问题听好了,问题来了,当我这边提交完成之后,我在这边进行数据的查询,我查询到的是零还是123,告诉我零还是123,来各抒己见好吧,翻翻你们的看法。

好了,有说连的,有说123的,但是我看到的情况是123的,情况应该是偏多的,但是实际查询起来你的结果它是连,并不是123,还有刘娜说,老师要看隔离级别,这块跟隔离级跟隔离级别没有半毛钱关系。

没有半毛钱关系,我先问一下我们当前的隔离级别,mysql默认的隔离级别是什么,什么查一下嘛,flat at concision,什么repeatable read,因为我从来没有改变过合理的级别。

所以别的级别是一模一样的。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

没有任何一个区别,这样你首先要记住了,好吧,先把这个记住来,现在我把两边的事物全部提交掉,commit我在演示另外一种情况,看好了另外一种情况,什么情况,我现在都commit掉了。

我同时再开启我们的事物,开启之后我看一下我们的数据,三星和t18 ,现在数一样吗,现数是一样的一样吧,一模一样,隔离级别我也没动过,我依然在第二个窗口里面,我做一个更新操作,update t18 。

set name等于合合的走,我一样在提交,我现在读取到的结果是123还是连,什么,连是吧,失联了失联唉,为什么,为什么在刚刚这里面的时候,我就可以读到最新的数据,为什么在这的时候我就读不到最新数据了。

听好在我第一次演示的时候,它是可以读到最新的数据的,修改之后的数据,但在第二次的时候。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

我就读取不到修改之后的数据了,你在这边进行查询的话,他已经改了,他的数据明显就不一致了,小福利说数据库bug,怎么可能数据库bug。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

这里面其实涉及到的就是当前读和快照,读的问题,跟缓存没有半毛钱关系,这也是mv c c它存在的一个重要的原理,重要的点好吧对,区分点是什么,是我在读取之前,我进行了一次查询操作。

为什么我执行一次查询操作之后,就能够达到当前的事物,但是达达当前实现效果了,原因是什么,这个原因在于mv c c。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

在下面我要详细的去讲一下,mv c c具体的实现机制。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

你准备好了吗,想搞明白刚刚为什么会出现这种情况吗。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

为什么我多执行了一次查询操作之后,两次结果就不一样了,来想知道的扣一请结一下自己好吧。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

这时候核心点和重点来了,来先说m c c m c c在进行底层实现的时候。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

它总共包含了三部分操作,第一部分叫什么叫隐藏字段,什么叫永恒之断,也就是说,在我们的m v c c进行实际操作的时候,他其实除了我们看到的字段之外,会包含一些包含一些我们看不到的字段,看完自然有几个呢。

有很多这块我重点说三个,第一个什么叫db下划线,t r x下划线a b这是第一个隐藏字段,它要表述的我看表示什么意思呢,其实非常简单啊,表示什么叫自创建这条记录啊,或者最后一次修改该记录的事务id。

这是第一个字段要表示的意思,还有第二个隐藏字段叫什么叫db下划线,roll下划线p t2 ,他表示什么意思,它叫做,做完了这个回滚指针好吧,指向数据的上一个版本,上一版本都一样的。

还包含第三个字段叫db下划线,我昨天说过的东西叫roid吗,什么意思啊。

### 士兵 MCA 知识图谱概述 士兵教育专注于IT领域培训,特别是Java开发方向。MCA (Memory, Concurrency, Architecture) 是其核心课程之一,旨在帮助学员深入理解计算机体系结构、并发编程以及内存管理等方面的知识。 #### 记忆管理和优化 在MCA知识图谱中,对于内存管理部分的学习至关重要。这不仅涉及如何有效地分配和释放对象所占用的空间,还包括垃圾回收机制的工作原理及其调优方法[^1]。例如,在JVM环境中可以利用`jmap`命令来查看堆内存在不同代中的分布情况;通过`jstack`分析线程转储文件以定位死锁等问题所在位置。 #### 并发编程模型 针对现代多核处理器环境下的高效程序设计需求,该课程还涵盖了多种常见的并发模式和技术实现方式。包括但不限于同步器框架AQS(AbstractQueuedSynchronizer),它作为许多高级同步组件的基础构建模块提供了强大的功能支持;还有Fork/Join并行计算框架能够充分利用硬件资源加速任务执行效率等知识点[^2]。 #### 架构设计理念 为了使学生具备解决实际项目难题的能力,MCA同样重视培养良好的软件架构思维习惯。从单体应用到微服务转型过程中涉及到的服务拆分原则、API网关选型依据等内容均有所涉猎。此外,关于分布式系统的CAP理论解释也属于必修课目的一部分,有助于加深对一致性、可用性和分区容忍度三者之间权衡关系的理解程度。 ```java // Java代码示例:创建一个简单的线程池用于处理并发请求 ExecutorService executor = Executors.newFixedThreadPool(5); for(int i=0;i<10;i++){ final int taskID=i; executor.submit(() -> { System.out.println("Executing Task "+taskID+" by Thread " +Thread.currentThread().getName()); }); } executor.shutdown(); ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值