当前位置: 首页 > 科技观察

一道程序员经典面试题,数据库索引为什么要用B+树

时间:2023-03-12 08:46:35 科技观察

最近有不少小伙伴参加面试转行,校招也开始了。最近面试了几个实习生,感觉基本功都不够好,数据库在程序员面试中起着举足轻重的作用。今天我们就来说说什么是数据库的索引?索引就像我们书籍的目录。如果一本书没有目录,那么你要找到某个知识点是相当困难的。数据库的索引就起到了这样的作用。索引会告诉你存放相应数据的磁盘地址,就像目录的页数一样。那么数据库的“目录”是什么样子的呢?常见的数据库索引分为三种。第一个是哈希表。相信大家对哈希表都不陌生。我们可以散列数据库的索引字段并保存。只要哈希算法设计合理,我们就可以快速找到对应数据的一个存储地址,然后在对应的存储地址快速找到数据。那么,哈希索引有什么缺点呢?首先,哈希表比较适合放在内存中使用,但是如果放在磁盘上就比较麻烦,尤其是哈希表扩容的时候,磁盘上的很多数据都会被修改。其次,哈希表不能进行区间筛选。第二种是数组索引,和上面的哈希表类似,但又有所不同。与哈希索引类似,数组索引的效率也很高。要在有序数组中查找元素,我们只需要执行二分查找。但是数组索引的问题也很明显,就是插入很麻烦。当你插入一个新元素时,你必须将后面的所有元素移回来。因此,我们一般只对数组索引使用静态数据。有序数组都提到了,那么下一步肯定是二叉树。我们说的二叉树当然是二叉排序树。与数组相比,二叉排序树最大的优点就是插入方便。但同时也存在这样一个问题,因为索引数据可能存在于磁盘中,所以如果索引数据超过1000条,可能需要10次才能找到最终数据,磁盘IO的瓶颈在于寻找和追踪。轮换,效率必然下降。因此,我们需要尽量减少磁盘上的寻道次数和旋转次数,因此多叉树在数据库索引中得到了广泛的应用。在多叉树中,比较常用的是B+树。现在你知道为什么会有数据索引,为什么B+树被广泛使用了吧。欢迎大家关注我,一起学习,一起进步。您的支持是我继续聊天的动力。