暂无图片
暂无图片
1
暂无图片
暂无图片
暂无图片

GBase 8s索引的结构B+树

原创 一直在路上 2022-02-24
802

一、B+树

数据库常用的索引结构有二叉搜索数、B树,B+树、Hash、位图和R树,其中使用最广泛的是B+树。下面简单看一下B+树的索引结构。

B+树可以看作改进的B树,在介绍B+树之前,我们先来看看B树的索引结构,如图所示,B树把各个存储块组织成一棵树的形式,这棵树总是保持平衡的,即所有叶子节点总具有相同的深度。B树中有三个节点:根节点、分支节点和叶子节点。根节点指向多个分支节点,分支节点指向叶子节点,叶子节点指向实际的数据行地址。
B树.png
一棵m阶B树是一棵平衡的m路搜索树,,每个存储块(节点)存储m个关键字和m+1个指针。它或者是空树,或者是满足如下性质的树。

1、根节点至少包含两个孩子节点,即至少有两个指针被使用,每个指针指向B树的下一层存储块。
2、总是保持数据的有序性,每个存储块中的关键字按递增顺序排列。
3、分支节点至少有[(m+1)/2]个指针被使用。
4、在叶节点中最后一个指针指向它右边的下一个叶节点,即下一个关键字大于它的存储块。其它m个指针至少要有[(m+1)/2]个被使用,每一个指针指向实际的数据记录。如果第j个指针被使用,那么它指向具有该块中第j个关键字的记录。

B树的这种存储结构保证了搜索、插入和删除操作的时间复杂度在对数级别内。在搜索时从根到叶节点递归查找,将需要查找的关键字和根节点(分支节点)中的各个关键字进行了对比(可用顺序查找法或二分查找法),找到该关键字存在的区间,根据指针递归查找下一层节点,直到叶节点为止,即可找到叶节点指向的实际数据行地址。插入时,B树从最底层开始增长,当节点溢出(关键字个数多于m个)时,节点自动分裂,新节点会被提升到高一级的层数上,删除时操作正好相反。

在GBase 8s数据库中,B+树的索引每个索引节点都是双向连接的,都有指向前一个和后一个同级节点的指针,这样可以进行区间范围的查询,在同级节点间也可以进行正序和逆序搜索,大大提高了索引在数据搜索中的性能。一个节点向左或向右跳转到它的兄弟节点的能力是B+树的一个亮点,GBase 8s数据库中的所有非多维数据索引都是B+树索引。
B树.png
使用B+树进行搜索时,可以对索引进行升序和降序扫描,例如:

select cname,phone from customer order by customer_num;
select customer_num from customer order by customer_num desc;

另外,再进行区间搜索时,左右搜索方式可以快速找到相邻记录的信息,B+树结构索引相对B树在区间搜索方面的性能有了较大提升,例如:

select cname,phone from customer where customer_num between 10 and 350;
select custmor_num from customer where customer_num>=10 and customer_num<=350;::: hljs-center

居中

:::

最后修改时间:2022-02-25 11:28:10
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论