Hash索引的查找速度很快,几乎是O1的,但是为什么不适用 HashMap 来做数据库索引呢?
1、区间值难找。因为单个值计算会很快,而找区间值,比如 100 < id < 200 就悲催了,需要遍历全部hash节点。
2、排序难。通过hash算法,也就是压缩算法,可能会很大的值和很小的值落在同一个hash桶里,比如一万个数压缩成1000个数存到hash桶里,也就是会产生hash冲突。
MySQL的InnoDB存储引擎支持以下常见索引:B+tree索引(最关键)、全文索引、Hash索引(内部)
B+tree索引
B+tree是通过二叉查找树,再由平衡二叉树,B树演化而来。一个int有序数组转化为二叉查找树示例图:
所有的节点都有,称之为满二叉树。