B树
- B树的每个结点包含关键字和数据本身
- B树规定绝对平衡,使得查找效率变高
- 叶子结点是失败结点,将(-∞,+∞)划分成了n+1个区间
- B树就是一个m叉查找树
B+树
- B+树的每个结点仅存放关键字,不放数据本身
- B+树规定绝对平衡,使得查找效率高
- 叶子结点是每个关键字+数据
- B+树类似于索引查找
为什么数据库使用B+树实现呢?
- B+树,每个结点不存放数据,那么相同数据下,B+树会更低,查找效率高。
- B+树,叶子结点才是每个数据,叶子结点还连接起来,形成链表,支持单链表的查询。
- 我们在选择主键(关键字)时候,选择int类型,自增的是最好的。因为这样,在每一次插入数据时,都会往链表最后插。如果别的类型做主键,可能下一条数据插到链表中间,这样会导致树的调整,引起性能消耗。
B+树能存放多少数据呢
在B+树中,一个结点存放的是一个数据页,默认是16KB。
数据页又区分为结点页、叶子页。结点页只存放关键字,叶子页存放关键字和真实数据。所以假设结点页能存放1000个关键字,叶子页能存放100个记录。
那么对于一个3层高的B+树,能存放的数据量是:1000 * 1000 * 100 = 1亿条 行数据。
所以,在1亿条数据中只需要3次IO,加载3个页面,即可找到需要的数据。
并且在一个页面中,关键字会组成一个顺序存储的数组,直接二分查找,找到需要的关键字。