数据库的主要功能就是:存数据
和查询数据
,怎么存就不谈了,重点来看查询数据。
简单看一下数据结构的划分:
![数据结构 数据结构](./images/1577675887270.png)
数据结构
一、hash和二叉树
使用hash查找,直接就是key-value
非常快,时间复杂度O(1);使用二叉树从算法上看,也是最优方案,时间复杂度O(logN)。
但是,考虑到内存空间的问题,我们不可能一次性把所有数据都加载到内存,内存没有那么大。所以,数据库底层没有使用。
二、磁盘IO
使用二叉树查询时,树高决定了磁盘IO的次数。树高,就是从根节点到子节点有多少级。 树越高,发生的磁盘IO次数就越多,耗时就越长!所以,要减少耗费时间,就要减少树的高度。
![二叉树 二叉树](./images/1577683129586.png)
二叉树
三、B-树
B-树主要就是解决了树高的问题,把瘦高的树变得矮胖一些。B-树和二叉树的主要区别就是:中间节点存储的是边界值。
![B-树 B-树](./images/1577683539443.png)
B-树
四、B+树
B+树是对B-树升级,中间节点增加冗余数据, 叶子节点增加链表,支持范围查询。
![B+树 B+树](./images/1577692403359.png)
B+树
B+树的优势:
- 单一节点存储更多的元素(这样该节点下分支变多了,树变矮胖了),使得查询的IO次数更少。
- 所有查询都要查找到叶子节点,查询性能稳定。
- 所有叶子节点形成有序链表,便于范围查询。
来源: https://blog.csdn.net/qq_35571554/article/details/82759668
参考: