刚刚整理完MySQL的笔记,想起记录hash和b+tree的区别,
那么现在顺手写一下。
Hash索引是这样子的:
举个例子,比如有某个值,A,hash索引会把A转换成hash码存入hash表中,是无序的,大概就是下图这样子,hash的排序是根据hash码来排序,因此对饮的表数据是无序的
因此和B+tree不一样,区别如下:
hash不支持最左原则,b+tree支持。因为hash的联合查询是这样,比如where a=1 and b=2,是把 a=1 and b=2转成一个hash码来进行查询,如果换成 b=2 and a=1,那么hash码将完全不同,索引失效。
hash不支持范围查询,因为hash是无序的,和b+tree不一样,b树是有序的
hash不支持order by,因为是无序的
hash不支持模糊查询
hash在等值查询上效率比btree高,因为hash可以根据查询条件直接找到需要的数据