gbase8s索引介绍一

一 索引数据类型

B-树

B树(B-tree)是一种树状数据结构,是一种平衡的多路查找树,能够用来存储排序后的数据。这种数据结构能够让查找数据、循序存取、插入数据及删除的动作,都在对数时间内完成。

B-树有如下性质

每一个节点最多有 m 个子节点
每一个非叶子节点(除根节点)最少有 ⌈m/2⌉ 个子节点,⌈m/2⌉表示向上取整。
如果根节点不是叶子节点,那么它至少有两个子节点
有 k 个子节点的非叶子节点拥有 k − 1 个键
所有的叶子节点都在同一层

限制

B-树每个节点都存储数据,数据数量比较多的时候,树的深度会变大,I/O次数会增加。

B+树

B+树是B树的变体,也是一种多路搜索树,其定义基本与B-树相同,区别如下

  • 非叶子结点的子树指针与关键字个数相同;
  • 非叶子结点的子树指针P[i],指向关键字值属于[K[i], K[i+1])的子树(B-树是开区间);
  • 为所有叶子结点增加一个链指针;
  • 所有关键字都在叶子结点出现;

B+树的搜索与B-树也基本相同,区别是B+树只有达到叶子结点才命中(B-树可以在非叶子结点命中),其性能也等价于在关键字全集做一次二分查找

B*树

B∗树是B+树的变体,在B+树的非根和非叶子结点再增加指向兄弟的指针,将结点的最低利用率从1/2提高到2/3。

B∗树定义了非叶子结点关键字个数至少为2/3M,即块的最低使用率为2/3(代替B+树的1/2);

B+树的分裂:当一个结点满时,分配一个新的结点,并将原结点中1/2的数据复制到新结点,最后在父结点中增加新结点的指针;B+树的分裂只影响原结点和父结点,而不会影响兄弟结点,所以它不需要指向兄弟的指针;

B∗树的分裂:当一个结点满时,如果它的下一个兄弟结点未满,那么将一部分数据移到兄弟结点中,再在原结点插入关键字,最后修改父结点中兄弟结点的关键字(因为兄弟结点的关键字范围改变了);如果兄弟也满了,则在原结点与兄弟结点之间增加新结点,并各复制1/3的数据到新结点,最后在父结点增加新结点的指针;

所以,B∗树分配新结点的概率比B+树要低,空间使用率更高。

R树

二 索引分类

索引可以根据不同的标准进行分类,主要包括以下几种:

按逻辑设计分类:
普通索引:用于加速对数据表中数据的查找速度,其结构主要基于B+树或哈希索引。
唯一索引:确保表中每一行的键值唯一,用于维护数据完整性。
主键索引:在创建表时指定某个字段为主键时自动创建,用于确保该字段内的值唯一。
全文索引:用于文本数据类型,支持文本内容的全文搜索。
按物理实现方式分类:
聚集索引(Clustered Index):表中的数据按照索引键值的顺序存储,一个表只能有一个聚集索引。
非聚集索引(Non-Clustered Index):表中的数据独立于索引存储,可以有多个非聚集索引。
按作用字段个数分类:
单列索引:基于数据表的一列创建的索引。
联合索引/多列索引:基于数据表的多列创建的索引,用于提高多列查询的效率。
其他特殊类型的索引:
空间索引(Spatial Index):用于空间数据类型,如GEOMETRY、POINT等。
函数索引:利用表中的一列或多列使用函数或表达式创建的索引。

三 索引的创建

参考gbase8s语法手册

四 索引的存储

聚集索引

在 gbase8s中 聚集索引是按索引指定的顺序对表的行重新物理排序,对插入性能消耗极大,对查询性能提升不明显,一般不建议使用

非聚集索引

1 单列唯一索引

create table haha (id int,name varchar(50));

insert into haha select level,sys_guid() from dual connect by level <100;

索引存储如下(片段)

slot 99表名 该索引列共99 条数据(不包含null)

以slot 99 为例

前两个字节 0020 标识该 varchar索引列的长度为32(10 进制)

46 46 46 33 37 30 30 35 32 32 32 32 34 42 31 30 41 42 45 30 38 41 45 35 43 38 36 35 35 41 43 34

标识索引列数据

00 00 两字节 作用未知

01 11 00 标识 此列数据所在行的rowid 为0x0111

查看索引的层次信息

 

五 在系统表中的信息

gbase8s的索引信息记录在当前库下sysindexes,sysconstraints两张系统表中

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值