MySQL数据库索引实现原理

本文来选自王争老师的极客时间—数据结构与算法之美
请你读
索引的功能需求:
1.根据某个值查找数据
2.根据区间值来查找某些数据
非功能性考虑因素:
1.执行效率
2.存储空间

假设可能的实现方式:
跳表
跳表是在链表之上加上多层索引构成的。它支持快速地插入、查找、删除数据,对应的时间复杂度是 O(logn)。
在这里插入图片描述
改造的二叉查找树
树中的节点并不存储数据本身,而是只是作为索引。把每个叶子节点串在一条链表上,链表中的数据是从小到大有序的。
在这里插入图片描述
改造的二叉查找树可以实现所需的功能,但是在性能上不能满足要求:
1.将索引放在内存:对于大数据占用太大无法实际应用。
2.将索引存在磁盘中,读取时IO占用时间资源太大。
构建m叉树
可以降低树的高度,进而减少IO读取次数。
考虑m的大小:
由于不管是内存中的数据,还是磁盘中的数据,操作系统都是按页(一页大小通常是 4KB,来读取的,一次会读一页的数据。如果要读取的数据量超过一页的大小,就会触发多次 IO 操作。在选择 m 大小的时候,要尽量让每个节点的大小等于一个页的大小。读取一个节点,只需要一次磁盘 IO 操作。
B+ 树的特点:
1.每个节点中子节点的个数不能超过 m,也不能小于 m/2;
2.根节点的子节点个数可以不超过 m/2,这是一个例外;
3.m 叉树只存储索引,并不真正存储数据,这个有点儿类似跳表;
4.通过链表将叶子节点串联在一起,这样可以方便按区间查找;
5.一般情况,根节点会被存储在内存中,其他节点存储在磁盘中。

B 树跟 B+ 树的不同点
1.B+ 树中的节点不存储数据,只是索引,而 B 树中的节点存储数据。
2.B 树中的叶子节点并不需要链表来串联。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值