索引:
索引是对数据可表中一列或者多列的值进行处理后的一种结构,索引可以快速访问数据库表中的特定信息。
采用hash进行缩影的效率非常高,基本上一次检索就可以找到数据,而B+tree需要自顶向下向下依次查找,多次访问节点才能找到数据,中间需要多次I/O操作,理论是哪个来说,hash比b+tree更快。
1、Hash索引图片
2、B+tree索引图片
Hash索引和B+tree索引的区别:
在查询速度上,如果等值查询,那么hash索引明显有优势,因为只需要经过一次算法就可以找到相应的键值,复杂度为O(1);当然了,这个前提是键值是唯一的,如果键值不是唯一的就会产生hash冲突,时间复杂的就会变成O(n),降低了Hash索引的查找效率,所以hash通常不会用到重复值列上比如列为性别、年龄、的情况等。
hash是无序的,如果是范围查询检索,hash索引也无法发挥作用。即使原来有顺序的键值也会变得无序;
hash索引无法事项like %**%模糊查询,而b+tree索引具有最左原则,可以实现模糊查询;
hash索引不支持多列联合索引,对于联合索引来说,hash索引在计算hash值得时候是将索引见合并后在一起计算hash值,不会针对每个索引进行单独计算hash值,因此如果鱼蛋几个索引是,联合索引无法被利用;
引文存在hash碰撞问题,在有搭理那个重复值情况下,hash索引的效率极低。b+tree所有的查询都要找到叶子节点,性能稳定。
**场景区分
- 大多数情况下,都会有组合查询、排序、分组、模糊查询等查询特征,hash索引无法满足需求
- 在离散型高、数量基数大且等值查询时候,hash索引有优势
**