一、MySQL为什么用 B+ 树而不用 B 树呢?
B+相比较B树,有这些优势:
它是 B Tree 的变种,B Tree 能解决的问题,它都能解决。
B Tree 解决的两大问题:每个节点存储更多关键字;路数更多
扫库、扫表能力更强
如果我们要对表进行全表扫描,只需要遍历叶子节点就可以 了,不需要遍历整棵 B+Tree 拿到所有的数据。
B+Tree 的磁盘读写能力相对于 B Tree 来说更强,IO次数更少
根节点和枝节点不保存数据区, 所以一个节点可以保存更多的关键字,一次磁盘加载的关键字更多,IO次数更少。
排序能力更强
因为叶子节点上有下一个数据区的指针,数据形成了链表。效率更加稳定
B+Tree 永远是在叶子节点拿到数据,所以 IO 次数是稳定的。
二、Hash 索引和 B+ 树索引区别是什么?
B+ 树可以进行范围查询,Hash 索引不能。
B+ 树支持联合索引的最左侧原则,Hash 索引不支持。
B+ 树支持 order by 排序,Hash 索引不支持。
Hash 索引在等值查询上比 B+ 树效率更高。
B+ 树使用 like 进行模糊查询的时候,like 后面(比如 % 开头)的话可以起到优化的作用,Hash 索引根本无法进行模糊查询。