mysql索引使用的什么数据结构?为什么不使用其他数据结构?

索引的本质是一种排好序的数据结构。

MySQL中的索引的数据结构是 B+ 树

B+树使用所有叶子结点作为数据页,它是一个双向链表,所有数据记录节点都是按照键值的大小存放在这里;使用非叶子结点作为索引页,记录着每页数据页的页号和该数据页中最小的主键的记录。

如果采用其他的数据结构的话,比如哈希表,它会根据Key计算出下标来找到元素,所以对于等值查询很高效,但是不适合区间查询,如果用它来做索引,当进行范围查询时意味着要全部扫描。
还有跳表,它是在有序链表基础上加了索引层,可以支持区间查询。但是跳表在随数据量增多的情况,索引层也会随着增高,相应的就会增加读取IO的次数,从而影响性能。
不使用二叉树的原因是也是这个,每个节点最多2个子节点,随着插入的元素增多,而导致树的高度变高,这同样意味着磁盘 I/O 操作次数多,影响到整体查询的效率。

B树解决了这一问题,它允许1个节点有多个子节点,但并不高效。因为当B树做范围查询时需要使用中序遍历,那么父节点和子节点也就需要不断的来回切换涉及了多个节点会给磁盘I/O带来很多负担。

所以就有了b树的升级版b+树,所有非叶子节点都用来做索引,只有叶子节点存储数据而且是有序双向的链表,相比于B树既能支持高效的区间查询。

猜你喜欢

转载自blog.csdn.net/qq_34626094/article/details/124978646