3分钟让你记住B+树索引和哈希索引的“爱恨情仇”哈希索引:采用一定的哈希算法,将键值替换为新的哈希值。查找的时候不需要像B+树那样从根节点到叶子节点逐层查找。您可以一次锁定相应的位置并找到目标。价值。1.“独一无二”的B+树B+树就是Btree。它的树状结构很像一棵树,但却是一棵倒挂的树。所以我们称之为B+树索引。它寻找目标值的方式是从根节点依次到叶节点。也就是说:B+树的左右支点是同一个数,所以称为平衡多叉树。如果分成两个叉子,则称为平衡二叉树。点,左右对称。根到支点的高度为1,任意节点的两棵子树的高度都为1,即从根到叶节点,一层需要指向一层。指针用于连接每个节点。连接根和叶的树干称为指针。从上面两张图的对比可以看出,B+树索引就像一棵倒挂的树。树的根在顶部称为根节点,叶子在底部称为叶节点。由根节点连接的左右叶子节点是对称的,所以称为平衡多叉树。脚后跟和叶子之间的箭头称为指针。从左节点分析,第一层应该取值在[15,20]之间,第二层细分,取值在[15,18]之间。,依此类推找到目标值。可见B+树索引是通过范围找到目标值的。B+树索引的应用场景和不适用场景:适用于数据库、文件系统等场景,因为这些对象是一层层包含的,文件包含其他文件,需要逐层缩小才能找到。支持左右查询,使用B+叶子节点的指针,是双向的,不适合等价查询。2.“情有独钟”的哈希索引。指的是使用某种功能,即通过查找键值来找到你要找的对象。哈希算法是哈希函数,将明文翻译成固定长度的字符串密码,是单向的。所以不管你之前的明文用了多长时间的hash算法,算法输出后都是一个定长的字符串密码。代表算法有MD5,MD4...例如:比如我们要在百度上搜索Page的图片,如果没有外部标识,你想在庞大的图片库中找到Page你认为没有的图片非常困难。在这种情况下,我们可以使用哈希索引,它会将图片库中的图片转换成一系列0-1的代码。这样你会发现相似编码的图片会变得很相似。这样一来,我们只要在百度输入一个类似“Page”这样的代码,就会出来很多Page的图片。这称为哈希索引。优点:效率高,可以一次性直接找到目标哈希索引示意图:上图:当我们在百度中输入“page”作为key值,那么所谓的哈希索引会在图片库还有“Page”代码,然后就可以搜索Page的图片了。所以它不是范围搜索的一部分。哈希索引的应用场景和不适合的场景:支持等值查询:前提是没有太多重复键值。如果存在,会降低哈希索引的效率,造成哈希冲突问题。范围查询不适合哈希索引。不能使用哈希索引来避免数据排序操作。哈希索引不支持最左匹配规则,因为用哈希值替换键值是单向的。3、B+和Ha根据以上两种索引的示意图,我们可以得出以下不同的结论:Hash索引的效率高于B+树索引。B+树是平衡的多叉树,所以从根节点到叶子节点的查找效率相差无几,基本不会有波动,也可以进行顺序扫描,即双向指针B+树可以左右移动,双向反向搜索,效率很高。哈希索引,根据键值作为一个“字符串”,可以一次性检索。不需要像B+树索引那样从根节点到叶子节点逐层查找,所以Hash索引的检索效率比B+索引高。等价查找Hash占优,在一定范围内,B+树索引占优。由于Hash索引是按键值查找的,只有键值相等才能找到需要的值。它不能用于基于一定范围的搜索,但是B+树索引可以实现在一个范围内的搜索。因此,在查找相等的键值时,Hash索引具有明显的优势;在一定范围内搜索时,B+树索引优势明显。B+树的效率是比较均等的,Hash索引在发生碰撞时效率会大大降低。由于B+树索引是一颗(左右)平衡的多叉树,索引过程中的效率毕竟是均衡的,不会有幅度上的大波动。而Hash索引,在有大量重复键值的情况下,效率会很低,因为会索引这么多相同的键值,它无法区分键值后面的哪个存储对象是目标它正在寻找,索引是会发生散列冲突问题。B+树索引更适合数据库的模糊查询。对于select*from[user]wherenamelike'%3%'inthedatabase,查找name中三个的模糊查询,Hash无法完成。模糊查询本质上也是范围索引,所以在这种情况下,应该使用B+树索引。
