B+树是一个平衡的多叉树,从根节点到每个叶子节点的高度差值不超过1,而且同层级的节点间有指针相互链接,是有序的,如下图:
哈希索引就是采用一定的哈希算法,把键值换算成新的哈希值,检索时不需要类似B+树那样从根节点到叶子节点逐级查找,只需一次哈希算法即可,是无序的
B+树索引和哈希索引在以下方面存在区别:
查询效率:
B+树索引在等值查询和范围查询上效率都较高,而哈希索引仅在等值查询上效率较高,对于范围查询则效率较低。
B+树索引的查询效率相对稳定,因为查询都是从根节点到叶子节点。而哈希索引在有大量重复键值的情况下效率较低,因为会发生哈希碰撞。
索引结构:
B+树索引的节点间通过指针链接,从根节点到叶子节点的路径不会超过1。
哈希索引的节点间通过指针链接,从根节点到叶子节点的路径高度差值不超过1。
适用场景:
B+树索引适用于范围查询和排序查询,因为它可以保持数据的顺序。
哈希索引适用于等值查询,因为只需要经过一次算法即可找到相应的键值。
查询方式:
B+树索引可以直接通过索引完成查询,不需要回表查询。
哈希索引在等值查询时可以避免回表查询数据,但在范围查询和模糊查询时则需要先找到键值所在位置,再根据链表往后扫描,因此需要进行回表查询。
稳定性:
B+树索引的查询效率稳定,因为都是从根节点到叶子节点的路径。
哈希索引的查询效率不稳定,当某个键值存在大量重复时,会发生哈希碰撞,此时查询效率可能极差。
其他特性:
B+树索引支持多列联合索引的最左前缀匹配规则。
哈希索引不支持模糊查询以及多列联合索引的最左前缀匹配规则,因为哈希函数的不可预测性。
B+树索引的关键字检索效率比较平均,不像B树那样波动幅度大。
总结来说,B+树索引和哈希索引各有优势和适用场景。B+树索引在范围查询、排序查询和多列联合索引上具有优势,而哈希索引在等值查询上具有优势。选择哪种索引取决于具体的数据结构、查询需求和数据分布特点。