00:00
结构首先主要呢有这四种,B竖,哈希全文,R垂,那么蓝色这部分保证知识的完整性,那么同学们呢,知道名字即可,我们主攻是不是跟我们开发相关的B数啊,反正我也说过了,毕竟我们是Java开发工程师,不是DBA,好,那么如果以后工作中各位同学们随着自己的转型和深入,那么这些其他的索引呢,可以酌情根据自己的工作需求进行进一步的升华和提高。那么现在我们来再来看看缩影的原理,抬头我们再次强调,这个模型左边是行列的表格,就是我们真实的数据O吧,右边是不是一棵树啊好,注意这个表格,你的数据越来越多,这个表格是不是增长的越来越高,同理哈,这个数呢?相反我这样,如果这个数越来越高。
01:00
我查找的层次是不是越来越多,我们能用三次找到,是不是尽量就不要用第四次,因为每找一次是不是就一次磁盘L,那么呢,也就是说这棵树是不是尽量广度越来越广,因为这个广度管我们是不是同一层呢?好,那么呢,我们呢,来看看这样一个问题,下面我们呢,再来说一下它的检索的一个情况。来。同学们,这个还是二叉吗?来抬头,在数据库里面,它在物理存储上有这些单位和一些说法哈,叫段区块。就比如说有点像你买多少克,多少斤多少吨。就是一种衡量单位,什么意思呢?如果是计算机专业的同学都知道那个磁盘哈,就是硬件那个,我们也昨天我们说过MY的逻辑架构分几层,最底层是不是我们的存储层,说白了叫file system,也就是说不管你说破天,你这些数据最终是不是也是在硬盘上或者词汇上,而你们都知道,你们现在抽出来你们的那个,呃,硬盘也好,是不是都是一个长方形的,这是外面打了个封装,其实它里面是个圈,这这个知道吧,就是因为有些飞机上的同学呢,就你听我说一遍就行哈,无所谓的事情,就是它有磁盘,磁道,还有那个闭柱指针,去寻到去寻指能理解吗?那么也就是说一些数据它呢,给它写在这个磁道上,比如说哈,这条跑道,你可以用近似的理解哈,因为这个呢是计算机专业的基础课,有些非计算业专业同学没关系,就是大概近似的理解。第一种我们在这。
02:58
条跑道上假设存的都是水果,这条跑道上存的都是饮料,这条跑道上存的全部都是鸡鸭牛羊鱼的肉类,那么根据你的检索条件,它是不是从不同的磁道和跑道上去找相应的数据内容去一串的去读取啊,那么这个时候在磁道上,那么它也要有什么一个存储单位,就好比说我们Java,我们说过是不是面向对象编程,对Java就是一切记对象啊,我们要干什么事儿,无非就是说过,无非就是静态的属性和针对于这些属性能够做什么操作,动态的方法描述吧,实例变量,实例方法,这些是不是类也下这些什么,它是不是要封装一个单元,封装了以后变成一个叫类对外发布调用啊,比如说我的卖票程序,你的所有业务逻辑,你是不是叫public class ticket好一样,磁盘上这些装了一些东西,那大哥就像你去打盒饭一样,人家那一锅弄出来你没有谁去食堂里面抬着一个锅在那吃吧,拿着那个电饭煲吃啊,言下之意。
03:58
是不是拿一个小的容器,而你可以把它近似理解,这个磁盘块,断区块,你在哪一段,哪个区域的哪一小块,就刚好存储了你相应的这十条记录,或者这一个数据量听懂啊,那么这个呢,就是说一块一块一块的,就跟豆腐块一样,那么现在大家看我们有三种颜色,一个是最底层正方形的磁盘块,浅蓝色的没问题吧,第二个深蓝色的,第三个黄色的,最终是不是各种指针呢?我们现在的业务诉求是这样的。
04:33
我要查数据,在磁盘上,我呢先给它呢勾搭出来,然后呢,你看整一棵B树,浅蓝色的这个我们称之为一个磁盘块,我们可以看到每个磁盘块包含了一些什么,深蓝色的数据线和指针。就像我们刚才所说的,我们要找一个东西,一定是不是先找一个参考啊,然后往下找,找这个相当于说数的根,这个相当于说树的枝树干,最终这个是不是相当于叶子,树叶没问题吧,那么干嘛呢?
05:15
我如果要找29这个数字没问题吧?好,磁盘一包含数据线17和三十五三个指针,POINT123,那么干嘛呢?P1表示小于17的,P2表示大于17和小于35的之间的P3啊,是不大于35的呀,那么呢,往下走了以后呢,我要干嘛呢?我们真实的数据存在于叶子节点,就是这一堆,假设现在我要查找一个东西,非叶子节点,这个是不是非叶子节点不存储真实的数据,只存储指向搜索方向的数据线,也就是说17和35并不存在于数据表里面,它是就像是中药一样,是不是个药引的一个参考比较值啊来我们往下看,如果我要查找29,咱们这29是不是在这儿,但是我们先给个参考下29,请问跟17和35比,是比17小,比35大还是在中间,那么这个时候29是不是在17和30。
06:32
补之间,OK,找到指针P2来,再下来P二指的,也就是相当于说我一开始都是从词块一加载磁块一,就说那下一步我们找的应该是磁块二,磁块三还是磁块四呢?那么就要看P1 p2 P33个指针的指向,由于你29是在17和35之间,哥们,我是不是指到P2 p2的引用又指向了词块三,也就是它并不见得是加载词块二,明白不见得是按顺序,那么这个时候请问第二步,第一次IO来了,第二次IO我读出了词块三,那么请问磁块三二十九是不是在26和30之间,那么请问我是不是又指向引用P2 p2撸下来这块不是到词块八,请问有没有29了?OK,那么所以说这样的话,请问根据这个树的高度,我就从上到下,自顶向下逐步检索。求精的过。
07:32
成我哥们,我最终到走到29到家到这块我是不是只查找了三次啊,我有没有全文扫描好,那么这个时候同学们请看。如果要查找数据项29,那么首先会把磁块一由磁盘加载到内存,注意这句话,17和35并不真实存在于数据表,明白它只是个药引子,明白了吧,发生了DC2分查找,确定29,在17和35之间锁定磁块一的指针P2,内存时间因为非常短,忽略不计磁块一的P2指针,然后直到三再加载等等,根据刚才所说的总共是不是只发生了三次3O,同时内存做了二分查找,找到29,查询结束,总共三次,说白了什么?这棵树的B树的高度是不是也只有三楼那么高啊?那么也就说什么尽量的给数据,是不是横向扩高度比较矮最好啊?那么这个时候往下看,真实情况是三层的B数可以表示上百万的数据,如果上百万的数据你只需要查三次。IO性能的提高,我。
08:45
认为比你100万次的全文扫描是不是要提高很多呀,如果没有索引,每个数据线都要发生一次IO,那么总共需要上百万次的IO,我相信同样的一个结果,我查三次出来,你查要上百万次,这个性能我觉得一个天上一个地下不用比了吧,OK,那么呢,所以说这个呢,就是我们的什么索引的。
我来说两句