数据库索引为什么要用 B+ 树而不用红黑树呢?
来源:互联网 发布:迪丽热巴 陈伟霆 知乎 编辑:程序博客网 时间:2024/05/22 06:22
AVL 树和红黑树这些二叉树结构的数据结构可以达到最高的查询效率这是毋庸置疑的。
既然如此,那么数据库索引为什么不用 AVL 树或者红黑树呢?
这就牵扯到一个问题了,不考虑每种数据结构的前提条件而选择数据结构都是在耍流氓。
AVL 数和红黑树基本都是存储在内存中才会使用的数据结构,那磁盘中会有什么不同呢?
这就要牵扯到磁盘的存储原理了
操作系统读写磁盘的基本单位是扇区,而文件系统的基本单位是簇(Cluster)。
也就是说,磁盘读写有一个最少内容的限制,即使我们只需要这个簇上的一个字节的内容,我们也要含着泪把一整个簇上的内容读完。
那么,现在问题就来了
一个父节点只有 2 个子节点,并不能填满一个簇上的所有内容啊?那多余的内容岂不是要浪费了?我们怎么才能把浪费的这部分内容利用起来呢?哈哈,答案就是 B+ 树。
由于 B+ 树分支比二叉树更多,所以相同数量的内容,B+ 树的深度更浅,深度代表什么?代表磁盘 io 次数啊!数据库设计的时候 B+ 树有多少个分支都是按照磁盘一个簇上最多能放多少节点设计的啊!
所以,涉及到磁盘上查询的数据结构,一般都用 B+ 树啦。
阅读全文
0 0
- 数据库索引为什么要用 B+ 树而不用红黑树呢?
- 为什么数据库使用B树索引而非散列索引
- 为什么MongoDB采用B树索引,而Mysql用B+树做索引
- 数据库用索引为什么比不用索引更快
- 数据库索引为什么B树结构
- 数据库为什么要用B+树结构--MySQL索引结构的实现
- 数据库为什么要用B+树结构--MySQL索引结构的实现
- 数据库为什么要用B+树结构--MySQL索引结构的实现
- 数据库为什么要用B+树结构--MySQL索引结构的实现
- clk为什么要用posedge,而不用negedge
- 为什么要用VisualSVN Server,而不用Subversion?
- 为什么要用EL+JSP标签而不用JSP脚本
- 为什么要用EL+JSP标签而不用JSP脚本
- 类方法前面为什么要用instancetype而不用id?
- 为什么 MongoDB (索引)使用B-树而 Mysql 使用 B+树?
- Redis 为什么用跳表而不用平衡树
- Redis为什么用跳表而不用平衡树?
- 为什么我用JSF,而不用TAPISTRY
- unity菜单翻译
- 【NOIP模板】 树链剖分 (求lca)
- Python简单多线程实例
- SPI协议及其工作原理浅析
- 图(一)
- 数据库索引为什么要用 B+ 树而不用红黑树呢?
- 二进制转换
- 模板的分离编译
- servlet通讯录系统
- 2.1神经网络基础-二分分类
- SPOJ
- flask email service学习笔记-html+图片(补充)
- python_lintcode_433岛屿的个数_415有效回文串
- SCP免密传输设置