数据库索引

B树和B+树

1. 硬盘的结构

在这里插入图片描述

这是逻辑地址,并不是物理地址,同心圆称为轨道,扇形的区域成为扇区,因此每一块内存区域都可以被唯一的标识出来

块地址=轨道编号+扇区编号

在读取硬盘是,读取或硬盘读取存入时,都是以块为单位的,假设每块内存的大小为512,那么在内存中的编号就应该是0-511,地址成为偏移量,所以想要读取地址上某个具体的内容需要知道三个条件,轨道编号、扇区编号以及偏移量

在这里插入图片描述

2. 数据是怎样存储在硬盘上的

程序通过主内存去访问数据时,那么硬盘的数据必须先进入主内存,才能被访问到,然后在写入硬盘中,硬盘的数据不能直接被访问



3. 什么是索引

在这里插入图片描述

通过指针来记录、访问硬盘上快中存储的记录,这样就能够快速找到那个数,但是索引本身也需要存储到内存道中

假设此时索引的内存占用:id为10个字节 指针为6个字节,那么每个快中可以存储32条索引,100条数据也就需要3.几个块来存储索引,假设为4块,之前去寻找id等于5的用户,最多需要访问25个块,但是用了索引,通过地址来寻找,那么最多只需要访问4个块,一旦寻找到指定的数据表快,那么久在加上一个块,即为5块

对比:没加索引以前最多访问25个块

​ 加入索引以后最多需要访问4+1个块

此时创建的是一个密集索引,因为它会为每个字段都去创建一个索引,比如一号索引,那么他就指向id为1的数据



4. 什么是多级索引

在这里插入图片描述

但是,随着数据数量的不断增加,索引也在不断的变大,那么就会考虑再去创建一个索引来指向这个索引

假设上一个索引有32条数据,创建一个索引用于访问这32条数据,那么33号索引就指向上一个索引的终点,也就是下一块的起点,这种索引叫做稀疏索引,即并不会为每条索引都去创建一个索引

虽然减少了访问块的数量,降低了搜索时间,但是也消耗了更多的内存



5. 什么是m叉树

在这里插入图片描述

我们知道二叉搜索树,左子树比根节点小,右子树比根节点大,当去做寻找是,如果比根节点小,那么就去查找左子树,如果比根节点大,那么就去查找右子树,但是,只能存放一个key 和两个子节点,此时就会希望再次出现一种搜索树,如上图

假如查找的数组为35,那么35比20大,比50小,能存放两个key 25 和 50 ,以及三个子节点,就会往中间进行查询,此时是一个三叉树

这个就是m叉树,或者说m叉搜索树,m叉树一共能存储m个子节点m-1个key

这是一个4叉树的示意图

在这里插入图片描述

缺点:

创建过程不受到约束,没有创建过程的准则,可以随意创建,很有可能导致如下的结构在这里插入图片描述

让整棵树像一个线性结构,这样去进行查找遍历,就会耗费很多的时间



6. b树

有创建准则的m树就是b树

  • 根节点必须有两个以上的子节点

  • 其他节点都必须创建一半以上的子节点才能够创建一个新的节点

  • 所有的子节点都需要在同一水平

  • 创建过程是自下而上的

每个节点都存放着key和指针



7. b+树

不是每个节点都存在指针,只有叶子结点记录指针,会在子节点中街路指针副本,所以树中的每个键都会出现在叶子结点中,叶节点连接,像链表,此时就成为了一个密集所有

在这里插入图片描述




8. b树和b+树的区别:

叶节点中所有的键,在非叶节点中只有副本,叶子节点中必须有所有的键,非叶节点中没有记录指针,就想一个链表

总结:

  • B 树的所有节点既存放键(key) 也存放 数据(data),而 B+树只有叶子节点存放 key 和 data,其他内节点只存放 key(副本)。
  • B 树的叶子节点都是独立的;B+树的叶子节点有一条引用链指向与它相邻的叶子节点。
  • B 树的检索的过程相当于对范围内的每个节点的关键字做二分查找,可能还没有到达叶子节点,检索就结束了。而 B+树的检索效率就很稳定了,任何查找都是从根节点到叶子节点的过程,叶子节点的顺序检索很明显。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值