学习数据索引查找算法的时候我们可以在一个网站上查看具体的查找过程 https://www.cs.usfca.edu/~galles/visualization/Algorithms.html 我们默认数据是从小到大排序的
##1.线性查找
线性查找就是从一堆数据的第一个挨个找,所以效率是最慢的
##2.二分查找
二分查找是常考的一道题,我们每次都找数组中中间的数据来对比,如果要找的数小于这个数,那么我们就在前一半的数据中再取中间的数对比。 就这样依次直到找到数据。
虽然二分查找的效率已经相对于线性提升了很多,但是有个问题,就是我们必须能找到中间的数在哪里,但是如果在磁盘中呢,数据存放都是不规律的,这样二分查找就有问题了。
##3.二叉查找树
首先不了解二叉查找树的可以去了解下,那么在这个树中可以看到这样的规律就是一个节点左边大的数比他小,右边的比他大,所以我们要找一个数据的时候就可以利用这个规律来找即可。
但是同样这个树是有缺陷的,加入我们要插入的数据总是比要插入的节点的数大,那么不就一直把数据插入到了最右边吗,也就是又搞成了线性的数据结构了。
##4.平衡二叉树
平衡二叉树相较于二叉查找树来说 ,他具有自旋的功能,也就是说他可以规避二叉查找树的一边过长的问题。
比如我们插入三个数据,1,2,3
平衡二叉树就会通过旋转的方式转换为一个平衡的树:
按道理说这个平衡二叉树已经是究极好用的数据结构了,那么为什么现在的数据库还是没有使用这种数据结构来存储数据呢? 因为它存储的数据太少了,每个节点只能存储一个数据。
而我们了解到文件系统(例如XFS/EXT4)他的最小单元是块,一个块的大小是4k,也就是说如果使用二叉平衡树这样一个节点,就要占用一个块那么存储的数据就太少了,还浪费了资源。
##5.B树
B树相对于上面的平衡树有了一些有点,比如数据存的多了,也不需要平衡了,树的高度也低了,但是有个问题,就是数据库中会有范围查询的需求 ,在b树这里就查找非常麻烦。
##6.B+树
可能有对于上面的B树范围查询麻烦没有概念,那么我们看下B+树的特点:
可以看到B+树上层的所有结点都是作为索引来查数据的,而所有的数据在最下面一层都有,而且还以线性结构存储,这样就很清晰了,上面的节点可以作为路由来查找数据,同时下面的数据 又是线性的,这样查找范围数据很简单。