(面试题)MySQL中索引的结构

41 阅读1分钟

其实就两种,Hash和B+

Hash索引(了解)

  • Hash索引,底层实际上就是使用了一个Hash表,所以说在等值查询上比较快,不需要像B+树那样从根节点到叶子节点。但是除了等值查询以外几乎没有优点,比如说范围查询、模糊查询、排序order by==>速度都很慢。

所以大多数情况下使用的都是B+树索引

B+树索引(重点)

=====> 为什么不用二叉搜索树?

答:我们每次查询节点,需要进行一次磁盘IO,这是耗时操作。二叉树每个节点存放一个元素,导致树的高度比较高,查询IO次数多。而如果我们用B树,由于每个节点存放多个元素,树的高度就能降下来,一次IO就能获得多个用于比较的索引值,需要查询IO次数少

=====> 为什么不用B树 或者说 B+树的优点?

答:因为B+树相较于B树只有叶子节点存放数据,这样就有三个好处

(1)因为只有叶子节点存放数据,树枝节点就能存放更多用于比较的索引值,比较效率更高,相比于B树更低更胖

(2)因为只有在叶子节点存放数据,所以所有查询都需要走到叶子节点,查询稳定性高

(3)B+树叶子节点是双向链表,双向链表知道自己的前后节点,如果需要范围查询直接横向遍历即可,而二叉树或者B树范围查询需要中序遍历。(比如<5,沿着自己往前找。比如>5,沿着自己往后找)

3.jpg