WatchDogs

Knowledge of Backend Development

0%

MySQL为什么用B+树

一 首先,如果不使用索引,则时间复杂度为O(n)

二 Hash索引
优点:它的时间复杂度为O(1)
缺点:他不适合范围查找
如果只需要依据ID来查找对应的行,也可以选择Hash索引

三 平衡二叉树,红黑树
总量越多,树的高度就会越大,每访问一层就要进行一次IO操作,由于数据库是存储在磁盘上的,大量IO操作会增加查询时间。

四 B-树
优点:每一个节点都可以有多个字节点,可以控制树的高度,比平衡二叉树少IO操作
缺点:他的节点不是全部都存在叶子节点,某些数据存在非叶子节点中。每一个节点中的子节点越多,则该节点内存在的数据就越多,非叶子节点的大小无法控制

五 B+树
所有数据都存在叶子结点中,减小非叶子节点,使非叶子节点大小尽量为一个磁盘Block,这样每次取出非叶子节点查询时,都可以充分提高IO效率,充分利用Block。
同时,B+树将每一个叶子结点都连接到下一个节点,更方便按顺序遍历

如果说这样难理解的话,可以这样想:把B+树想象成一本书的目录,你能忍受目录中两个标题之间含有正文吗?目录难道不是只有索引没有正文吗?

你能想象第38页翻过去之后不是39页吗?

以上两个问题就形象的解释了为什么不用B-树而用B+树