Mysql优化<索引数据结构>

 admin   2022-09-10 22:30   120 人阅读  0 条评论

透过链表树将统计数据组织机构出来,树的每一结点都包涵了健值 key、统计数据值 data、左结点结点操作符、左结点结点操作符。当中健值 key 是最核心理念的部份,它的值下定决心了树的组织机构花纹;统计数据值 data 是该结点相关联的统计数据,很多情景能忽视,举个范例,key 为身份证而 data 为中文翻译,透过身份证找中文翻译;左结点结点操作符对准左结点结点;左结点结点操作符对准左结点结点。

左左结点树也依次是链表搜寻树。

左结点树的大部份结点 key 值都小于它的根结点的 key 值。

左结点树的大部份结点 key 值都小于他的根结点的 key 值。

链表搜寻树能为一株空树。

?一般而言,根上的每一结点的 key 值都不成正比,但依照须要也能将完全相同的 key 值填入根上

?AVL树,也称均衡链表搜寻树,AVL是其发明人联系电话缩写。AVL树归属于树的一类,所以它也是一株链表搜寻树,相同的是他透过很大监督机制能确保链表搜寻树的均衡,均衡的链表搜寻树的查阅工作效率更高。

AVLShahdol一株链表搜寻树。

AVL树的左左结点结点也是AVL树。

?AVL树保有链表搜寻树的大部份基本上特征。

每一结点的左左结点结点的度之差的斜率最多为1,即均衡胺基酸为覆盖范围为[-1,1]。

是一类自均衡链表搜寻树,1972年由Rudolf Bayer发明,它与AVL树类似,都在填入和删除操作时能透过旋转操作保持链表搜寻树的均衡,以便能获得高效的搜寻性能。它能在 O(logn) 时间内做搜寻,填入和删除等操作。红黑Shahdol2-3-4树的一类等同,但很多红黑树设定只能左边是红树,这种情况就是2-3树的一类等同了。对于AVL树来说,红黑树牺牲了部份均衡性以换取填入/删除操作时少量的旋转操作,整体来说性能要优于AVL树。

结点是红色或黑色。

根结点是黑色。

每一叶结点(NIL结点)是黑色的。

每一红色结点的两个子结点都为黑色。(从每一叶子到根的大部份路径上不能有两个连续的红色结点)

从任一结点到其每一叶子的大部份路径都包涵完全相同数目的黑色结点。

最长路径不超过最短路径的2倍

?向红黑根上填入14的结点,由于15是黑色结点,所以没有破坏结构,不须要做任何的改变

如果向根上填入21的话,会破坏红黑树的规则,必须要调整,就是变色和旋转?

为了符合红黑树的规则,会把结点红变黑或者黑变红,21,22是连续的红色,因此要将22红变黑?

此时,不符合规则5,因此须要将25黑变红

此时还没有结束,因为25和27都出现了红色,因此须要将27变成黑色?

左旋: 逆时针旋转,父结点被自己的右孩子取代,而自己成为自己的左孩子

右旋:顺时针旋转,父结点被做孩子取代,而自己成为自己的右孩子

无论是链表树还是红黑树,都会因为树的深度过深而造成io次数变多,影响统计数据读取的工作效率

B树的检索格式

1、大部份键值分布在整颗根上

2、搜寻有可能在非叶子结点结束,在关键字全集内做一次搜寻,性能逼近二分搜寻

3、每一结点最多保有m个结点

4、根结点至少有2个结点

5、分支结点至少保有m/2颗结点(除根结点和叶子结点外都是分支结点)

6、大部份叶子结点都在同一层、每一结点最多能有m-1个key,并且以升序排列

InnoDB的特征:

读取统计数据的磁盘块是16kb,也就是4页,B树每一结点都有data,导致存放的页数变少,3次io只能查阅16^3次方统计数据,也就是4096条统计数据,而在企业中是不满足业务要求的。B+Shahdol对B书进行强化,让飞叶子结点中不存data,只存key值和操作符。

实例图说明:

每一结点占用一个磁盘块,一个结点上有两个升序排序的关键字和三个对准结点根结点的操作符,操作符存储的是子结点所在磁盘块的地址。两个关键词划分成的三个覆盖范围域相关联三个操作符对准的结点的统计数据的覆盖范围域。以根结点为例,关键字为 16 和 34,P1 操作符对准的结点的统计数据覆盖范围为小于 16,P2 操作符对准的结点的统计数据覆盖范围为 16~34,P3 操作符对准的结点的统计数据覆盖范围为小于 34。?

搜寻关键字过程:

1、依照根结点找到磁盘块 1,读入内存。【磁盘 I/O 操作第 1 次】2、比较关键字 28 在区间(16,34),找到磁盘块 1 的操作符 P2。3、依照 P2 操作符找到磁盘块 3,读入内存。【磁盘 I/O 操作第 2 次】4、比较关键字 28 在区间(25,31),找到磁盘块 3 的操作符 P2。5、依照 P2 操作符找到磁盘块 8,读入内存。【磁盘 I/O 操作第 3 次】6、在磁盘块 8 中的关键字列表中找到关键字 28。?

缺点:

1、每一结点都有key,同时也包涵data,而每一页存储空间是有限的,如果data比较大的话会导致每一结点存储的key数量变小

2、当存储的统计数据量很大的时候会导致深度较大,增大查阅时磁盘io次数,进而影响查阅性能

B+Tree是在BTree的基础之上做的一类强化,变化如下:

1、B+Tree每一结点能包涵更多的结点,这个做的原因有两个,第一个原因是为了降低树的度,第二个原因是将统计数据覆盖范围变为多个区间,区间越多,统计数据检索越快

2、非叶子结点存储key,叶子结点存储key和统计数据

3、叶子结点两两操作符相互连接(符合磁盘的预读特性),顺序查阅性能更高

注意:在B+Tree上有两个头操作符,一个对准根结点,另一个对准关键字最小的叶子结点,所以大部份叶子结点(即统计数据结点)之间是一类链式环结构。因此能对 B+Tree 进行两种搜寻运算:一类是对于主键的覆盖范围搜寻和分页搜寻,另一类是从根结点开始,进行随机搜寻。?

注意:

1、InnoDB是透过B+Tree结构对主键创建检索,然后叶子结点中存储记录,如果没有主键,那么会选择唯一键,如果没有唯一键,那么会生成一个6位的row_id来作为主键

2、如果创建检索的键是其他字段,那么在叶子结点中存储的是该记录的主键,然后再透过主键检索找到相关联的记录,叫做回表

本文地址:http://51ac.top/post/15541.html
版权声明:本文为原创文章,版权归 admin 所有,欢迎分享本文,转载请保留出处!

 发表评论


表情

还没有留言,还不快点抢沙发?