1. 具体到红黑树的话,这块应该怎么学呢?

二叉排序树你知道的吧?

这个我知道,就是左边比根节点小,右边比根节点大。

 

 

 

 

 

红黑树可以保证树的平衡性

 

 

 

 

 

 

 

为啥要设计成多路呢?

 主要是为了进一步降低树的高度,路数越多,树的高度越低。但是如果设计成无限多路的话就会退化成有序数组。

 

 

 B树一般做文件系统的索引使用比较多。

为什么文件系统的索引喜欢用B树而不用红黑树或者有序数组呢?

 文件系统和数据库的索引都是存在硬盘上的,并且如果数据量大的话,不一定能一次性加载到内存中。

 如果一棵树无法一次性加载进内存的话,这时候B树的多路存储威力就体现出来,可以每次加载B树的一个节点,然后一步步往下找。

 

 

 

查找的时候,每次载入一个节点进入内存就可以。

 

 

 

这是一个4路B+树,它的数据都在叶子节点,并且有链表相连。

 

这也是和业务场景相关的,你想想,数据库中 Select 数据,不一定只选一条,很多时候会选多条,比如按照 ID 排序后选 10 条。

 

我明白了,如果是多条的话,B 树需要做局部的中序遍历,可能要跨层访问。

 

而 B+ 树由于所有数据都在叶子结点,不用跨层,同时由于有链表结构,只需要找到首尾,通过链表就能把所有数据取出来了。

 

比如选出7-19,只需要在叶子节点中就能找到。

 

Hash索引与B+树

面试现场!

面试官:既然Hash索引比B+树更快,为啥mysql还用B+树来存索引呢?

 

你:这和业务场景有关。如果只选一个数据,那确实是 Hash 更快。但是数据库中经常会选择多条,这时候由于 B+ 树索引有序,并且又有链表相连,它的查询效率比 Hash 就快很多了。

而且数据库中的索引一般是在磁盘上,数据量大的情况可能无法一次装入内存,B+ 树的设计可以允许数据分批加载,同时树的高度较低,提高查找效率。

 

出处:转载自微信公众号:互联网侦察