什么是B+树?
B+树是一种多路搜索树的数据结构,用于组织和存储数据,特别是在数据库系统中广泛应用于索引结构。在B+树中,每个节点可以存储多个键值对,通常是在内存中进行操作的。这是官方一点的说发。那么怎么去理解这段话呢?个人理解就是,B+树就是字典,一个把各种事务按照某种关系进行分类存储起来。比如说你要查徐这个字,你会直接去索引找这个字母。数据库中的B+树通常用于实现索引,即通过某个列的数值快速定位到对应的行。假如说你有一个学生表,其中包含学生的姓名、年龄和学号等信息,那么可以针对学号这一列建立B+树索引。从而能更快的去找你想要的值。当然,数据小的话体现不出来,但是你如果从几个万个学生里面找姓徐的,使用b+数和你进行for循环的匹配那个更快我就不多说了。
什么是哈希(hash)?在数据库中,哈希(hash)是一种常用的数据结构和算法,用于实现哈希索引和哈希函数。
哈希索引是一种数据结构,将键值对(Key-Value pairs)映射到哈希表中的特定位置。在数据库中,哈希索引可以用于加速对数据的查找操作。通常,数据库系统会维护一个哈希索引,将每个键(如行的主键)映射到对应数据行的位置,这样可以快速地定位到特定键对应的数据行。
哈希函数是一种将任意大小的数据映射到固定大小的数据(通常是哈希值)的函数。在数据库中,哈希函数通常用于计算数据的哈希值,然后将哈希值映射到哈希表中的特定位置。好的哈希函数应该尽可能地均匀地将数据分布到哈希表中的不同位置,以减少哈希冲突(即不同数据映射到同一位置)的发生。
个人理解:说到哈希,就会想到哈希表,数据库中使用hash的话也是这种存储搜索方法。拿学生表来说,如果使用hash存储的话,就是学生的信息被映射了到了某一个哈希地址里面,从而建立键值对这种一一对应的关系,去优化索引,让其更好的,效率更高的去查询数据库。
区别:哈希索引不适用于范围查询,因为哈希函数并不能保证将键值的范围映射到连续的哈希值上。因此,对于范围查询等操作,哈希索引的效率会显著下降,而且数据较大的时候,你要对数据进行映射,使其拥有自己的专属hash值,这对内存是有考验的。但是hash适合那种主键的存储查找,个人理解主键只有一个,相当于一一对应,所以速度更快。B+树索引适用于范围查询,因为B+树中的都是按照类别分配好的,可以快速地定位到特定范围内的数据行,并且对内存需求相对较小。