hash索引,就是用过一定的hash算法,将键值换算成新的hash值,映射到对应的槽位上,然后存储在hash表中
就比如下面的name字段,经过算法的分析,就会对应出一张hash表
如果我的两个name字段计算出来的key相同,那么就会产生冲突,这就是我们所说的哈希冲突,也称之为哈希碰撞
如何解决哈希冲突?
采用链表的形式,将发生冲突的所有值,用一个链表连接起来
Hash索引的特点
1.只能够用于对等比较(=,in),不支持范围查询(between,>,<)
2.无法利用是索引完成排序操作
3.查询效率极高,通常只需要一次检索就可以了(不出现hash碰撞的情况),效率要高于B+树索引
mysql的存储引擎当前默认为InnoDB,而它不支持hash索引,但是它会在特定的条件下,自动将B+树转换为hash结构