hash索引底层实现:
hash索引底层是hash表,进行查找时,调用一次hash函数就可以获得相应的键值,之后进行回表查询获得实际数据。
B+树索引底层实现:
B+树索引底层是一个多路平衡查找树,对于每一次的查询都是从根节点出发,查找到叶子节点方可获的所查询的键值,然后根据查询判断是否需要回表查询。
hash索引和B+树索引的区别:
1、hash索引使用的是hash表结构,它将索引的值通过hash索引键的值
通过hash函数映射到一个固定大小的bucket桶中,然后在桶内查找。B+树索引使用的是多路平衡树结构,将索引键的值按照顺序保存到树节点中,并通过节点之间的指针进行查找
2、查询效率方面:哈希索引在等值查询上具有较好的性能,可以在常数时间复杂度上直接定位到目标数据,但对于范围查询和排序操作较差,因为原先是有序的键值,经过hash算法之后,存储位置随机分布。而B+树索引在范围查找和排序操作上更加高效,因为他是按照顺序存储的数据,可以有效的支持范围查找,
3、哈希索引对磁盘存储的利用效率不高,因为数据存储是随机分布的,可能会导致磁盘间的随机访问。而B+树索引节点是有序存储的,有利于磁盘的顺序访问。减少磁盘的IO次数,提高查询效率
4、hash索引在插入和删除上比较简单,只需要hash函数确定桶的位置,插入删除记录即可。而B+树的插入删除需要维护树平衡性,可能需要进行节点的拆分和节点的合并,相对来说更加复杂