索引选择,B+树和B树

alt

共同结构:

两种数据类型都是小的数据在左边,大的数据在右边,拥有二分查找的效率,logn 的效率。这是平衡树的性质

B 树的结构:

alt b+树的结构:

alt

  1. 叶子节点存储索引和数据,中间节点不存储数据,只存储对应的索引值。 这样中间节点就够支持更多的节点,就能存储更多的数据

2.叶子节点之间用双向链表连接起来,如果需要查找 where id>10&&id<20 就可以通过叶子节点之间的双向链表实现查询。找到 id 等于 11 的节点后,向后进行遍历,这样范围查询的效率就会很高。

3.B+树在 3-4 层的时候就可以存储上千万的数据,层次低,读取的 IO 次数变少。

为什么用 B+树,而不用 B 树

1.数据量:B+树的同样高度存储的数据要 比 B 树多,因为 B+树只有叶子节点存储数据,那么非叶子节点就能存储更多的索引值,这样相同高度的 B+树存储的数据量要大于 B 树。

2.支持范围查找 并且 B+树对于排序也是支持的,叶子节点是排好序的。

3.B 树的优点:b 树因为每一个节点都存储数据,有时候可能查询的效率比 b+树更高。但是 b+树千万条数据也就是 4 次 IO 这样,能够接受。

这两种结构对比普通二叉树的优势在于,普通二叉树的层次比较高,查找每次 IO 次数都很高,数据都是存储在磁盘中的,每次 IO 那样时间太长了。

其他索引

Hash 索引,支持等值查找,不支持范围查找。

B+树能存储多大的数据

mysql 表数据增长之后的执行时间测试。千万级别的时候都是在 1 秒左右,但是到两千万的时候 sql 执行的时间就会很长。

alt

#mysql##b+树#
牛牛的面试专栏 文章被收录于专栏

牛牛的面试专栏,希望自己在25年可以拿到一份大厂的SP Offer 你的点赞和收藏都是我持续更新的动力

全部评论

相关推荐

02-19 22:33
门头沟学院 Java
2025/2/12一面自我介绍技术问题JAVA&nbsp;中的集合有&nbsp;list&nbsp;和&nbsp;set,它们有什么区别呢?&nbsp;Set&nbsp;是怎么保证数据唯一的呢?如果&nbsp;set&nbsp;中有重复元素,它是怎么操作的呢?&nbsp;List&nbsp;中的&nbsp;ArrayList&nbsp;和&nbsp;LinkedList&nbsp;有什么区别呢?&nbsp;Synchronized&nbsp;和&nbsp;Lock&nbsp;有什么区别呢?&nbsp;Synchronized&nbsp;锁的加速和解锁过程是怎样的呢?&nbsp;普通方法和静态方法有什么区别呢? 如果两个对象同时执行被&nbsp;synchronized&nbsp;修饰的普通方法,它们之间是互斥的吗?&nbsp;如果想要让两个对象之间完成互斥,应该怎么做呢?AQS&nbsp;是什么,它是怎么实现公平锁和非公平锁的呢?CAS&nbsp;是什么,它是基于什么原理实现的呢?&nbsp;为什么要有&nbsp;CAS&nbsp;呢?&nbsp;你了解&nbsp;JAVA&nbsp;的内存模型吗?&nbsp;那基于&nbsp;JMM,再讲一下&nbsp;CAS&nbsp;的操作呢?&nbsp;ABA&nbsp;问题是什么,怎么解决呢?&nbsp;在&nbsp;JAVA&nbsp;中,怎么将一个普通变量变成&nbsp;CAS&nbsp;操作的变量呢?&nbsp;原子类一般是在局部变量中使用吗? 如果想要给一个全局变量加锁,使变量更新是CAS更新,应该怎么做呢?你了解&nbsp;volatile&nbsp;关键字吗?&nbsp;**在使用ThreadLocal中,会出现内存泄漏吗,内存泄露的点在哪?&nbsp;回答的不好!!**垃圾回收的常用算法有哪些呢? 当一个大对象创建时,会分配到哪个区域呢? 在垃圾回收过程中,标记原理是什么样的呢? 如果一个对象的&nbsp;key&nbsp;已经被回收了,为什么&nbsp;value&nbsp;还会存在呢?&nbsp;还存在ThreadLocalMap中。反问实习生在公司的主要工作内容有什么了解吗? 二面1000个任务,并发10的执行?(没回答好~)项目拷打#牛客AI配图神器##面经#
查看28道真题和解析
点赞 评论 收藏
分享
点赞 评论 收藏
分享
评论
2
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务