B树的需求:
一、 对文件系统建立索引
1.1 用Hash表
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/064bc5fe6f092da36397b29f81cf0c99.png)
hash不均匀的情况,就会退化成链表
1.2 BST
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/c6567b7769d16411becce3cbe6f66f43.png)
同样可以退化成链表
1.3 用AVL
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/d666d56cab1f5f2f8b9794c1ab830847.png)
插入删除的成本太高了
1.4 红黑树
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/f411e10fab2ca9576a9d4f61000e424b.png)
数据太大,深度会变深
所以就会增加 叉 来减少深度
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/275180f5bafca3cc5796f24bedf7a2d5.png)
这就是B树
二、B树
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/1f8cf7f483f5c591972cf74452c9ca6c.png)
2.1 在B树中查找
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/145a298659e471db092ba9ff172e4884.png)
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/377c3338c163a0bc20a4075c27deb38f.png)
占用的空间都是4k * n
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/38d5fa66947001edc91e84d6b07b533d.png)
- 第一次IO 磁盘1
- 第二次IO 磁盘3
- 第三次IO 磁盘8
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/dfc48afa93ffdc5c03b7dc892d54e9fb.png)
存取多少数据? 在父节点中存储数据太浪费了
因此改进B树,只在叶子节点中存储数据
三、B+树
1…10 都存储在叶子节点当中
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/c5700aa172771dbcc9b8f8c51eee99d5.png)
四、B树中删除
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/63455f17d4206cb5f7a7be730bc734ed.png)