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

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

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

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

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

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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

兔子昂

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值