b+树优点
目前的mysql索引使用b+树结构, b+树使用内部节点存储key和指针,叶子节点存储数据, 内部节点没有存储具体data, 结构变得矮胖 使得io次数变少, 性能提高, 由于数据的查询都是从根节点到叶子节点的查询路径, b+树的查询路径相同, 查询非常稳定
b树和b+树的区别
B树没有内部节点和叶子结点的区分,它的每个节点都是即存了key又存了data
由于没有内部节点和叶子结点的区分,使得B树没有将叶子结点用链表串联起来的结构
进行单个key查询时,B树最快可以在O(1)的时间代价内就查到。而从平均时间代价来看,会比B+树稍快一些。但波动会比较大,因为每个节点既存key又存data会使得树变高,底层的节点的IO次数就会变多
进行范围查询时,由于缺乏叶子结点的连接,因此只能通过树的遍历来完成范围查询,这会涉及多个节点的IO问题,效率不如B+树。
因此,存在大量范围查询的场景,适合使用B+树(比如数据库);
而对大量单个key查询的场景,可以考虑B树(比如NOSQL的MongoDB)
总结
b树和b+树都使用节点去查询数据,访问一个节点需要一次IO, 一个节点16k, b树在节点既存key又存储data, 导致能存的数据变少, 节点变多, 树会变高, 当范围查询时会涉及多个节点, 增加io次数, 而b+树有内部节点和叶子节点的区别, 内部节点只存key和指针,一个内部节点存的key很多, b+树变得矮胖型, 减少节点之间的IO文章来源:https://www.toymoban.com/news/detail-716504.html
b+树三层结构大概能存储2000W条数据, 查询稳定, 只需要3次IO操作就可以找到数据, 也是用于区分数据表是否需要分区的证明, 当b+树超过三层一般认为可以进行分区分表文章来源地址https://www.toymoban.com/news/detail-716504.html
到了这里,关于mysql为什么用b+树的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!