mysql 索引树为啥是B+tree

1、索引是什么

数据库管理系统中的一个排序的数据结构

三种索引:普通索引、唯一索引、全文索引(一般用ES替代)

数据结构模拟器 : https://www.cs.usfca.edu/~galles/visualization/Algorithms.html

1.1 先了解下几种常用的查找树

二分查找树 Binary Search Tree

左子节点<父节点

右子节点>父节点


存在一种极端情况,退化成链表


查找和插入比较快。但是数据树深度足够深时,速度变慢。树不够平衡,那么有没有一种能够平衡数据的树呢?

平衡二叉树:AVL Tree

左右子树深度绝对值不能超过1,并且左右两个子树都是一棵平衡二叉树 ,怎么理解呢?


左边树深度为1,右边树深度为2,所以下一个数字应该保证两边深度一致



缺点:频繁旋转会使插入和删除牺牲掉O(logN)左右的时间,不过相对二叉查找树来说,时间上稳定了很多。有没有更好的解决方式呢?

B-tree(多路搜索树,并不是二叉的)是一种常见的数据结构。使用B-tree结构可以显著减少定位记录时所经历的中间过程,从而加快存取速度。按照翻译,B 通常认为是Balance的简称。这个数据结构一般用于数据库的索引,综合效率较高


增加了树杈的节点,减少了树的深度,提高了IO的查找速度。有什么缺点?树杈多了以后,频繁的分裂合并带来一定的速度影响?

B+ tree:只在叶子节点存储数据,为啥?

B+树由于非叶节点只是索引部分,这些节点中只含有其子树中的最大(或最小)关键字,当非终端节点上的关键字等于给点值时,查找并不终止,而是继续向下直到叶子节点。 因此在B+树中,无论查找成功与否,都是走了一条从根到叶子节点的路径 ,保证了查找的稳定性。

树的所有叶结点构成一个有序链表,可以按照关键码排序的次序遍历全部记录

为啥不用红黑树呢?

1.红黑树最大深度与最小深度不能超过2倍,不够稳定

2.红黑树一般放在内存里面使用

总结:AVL Tree 解决了二叉树不平衡的缺点,B-tree 多叉树解决了AVL树高度过高的缺点,B+tree只在叶子节点存储数据,叶子节点形成双向链表,查找数据更稳定,深度基本固定。

你可能感兴趣的:(mysql 索引树为啥是B+tree)