这是我参与「第五届青训营 」伴学笔记创作活动的第 16 天
索引的底层数据结构
Hash表
- Hash冲突问题——链地址法
- Hash索引不支持顺序和范围查询
B树/B+ 树
B 树也称 B-树,全称为 多路平衡查找树 ,B+ 树是 B 树的一种变体。
B 树 和 B+树两者比较
- B 树的所有节点既存放键(key) 也存放 数据(data),而 B+树只有叶子节点存放 key 和 data,其他内节点只存放 key。
- B 树的叶子节点都是独立的;B+树的叶子节点有一条引用链指向与它相邻的叶子节点。
- B 树的检索的过程相当于对范围内的每个节点的关键字做二分查找,可能还没有到达叶子节点,检索就结束了。而 B+树的检索效率就很稳定了,任何查找都是从根节点到叶子节点的过程,叶子节点的顺序检索很明显。
-
它是 B Tree 的变种,B Tree 能解决的问题,它都能解决。B Tree 解决的两大问题是(每个节点存储更多关键字;路数更多)
-
扫库、扫表能力更强(如果我们要对表进行全表扫描,只需要遍历叶子节点就可以了,不需要遍历整棵 B+Tree 拿到所有的数据)
-
B+Tree 的磁盘读写能力相对于 B Tree 来说更强,同数据量下磁盘I/0次数更少(根节点和枝节点不保存数据区,所以一个节点可以保存更多的关键字,一次磁盘加载的关键字更多)
-
范围查询和排序能力更强(因为叶子节点上有下一个数据区的指针,数据形成了链表)
-
效率更加稳定,B+Tree 永远是在叶子节点拿到数据,所以 IO 次数是稳定的)
如果你发现了文章出现了错误或有不足,欢迎在评论区和我交流,我看到了一定会回复。
写文章不易,如果你觉得文章对你有帮助,麻烦点一下点赞、收藏,你的支持是我写文章的最大动力!