时间:2021-05-02
搞懂这个问题之前,我们首先来看一下mysql表的存储结构,再分别对比二叉树、多叉树、b树和b+树的区别就都懂了。
表存储结构
单位:表>段>区>页>行
在数据库中, 不论读一行,还是读多行,都是将这些行所在的页进行加载。也就是说存储空间的基本单位是页。
一个页就是一棵树b+树的节点,数据库i/o操作的最小单位是页,与数据库相关的内容都会存储在页的结构里。
b+树索引结构
b+树页节点结构
有以下几个特点
页的主要作用是存储记录,在页中记录以单链表的形式进行存储。
单链表优点是插入、删除方便,缺点是检索效率不高,最坏的情况要遍历链表所有的节点。因此页目录中提供了二分查找的方式,来提高记录的检索效率。
b+树的检索过程
我们再来看下b+树的检索过程
数据库访问数据要通过页,一个页就是一个b+树节点,访问一个节点相当于一次i/o操作,所以越快能找到节点,查找性能越好。
b+树的特点就是够矮够胖,能有效地减少访问节点次数从而提高性能。
下面,我们来对比一个二叉树、多叉树、b树和b+树。
二叉树
二叉树是一种二分查找树,有很好的查找性能,相当于二分查找。
但是当n比较大的时候,树的深度比较高。数据查询的时间主要依赖于磁盘io的次数,二叉树深度越大,查找的次数越多,性能越差。
最坏的情况是退化成了链表,如下图
为了让二叉树不至于退化成链表,人们发明了avl树(平衡二叉搜索树):任何结点的左子树和右子树高度最多相差1
多叉树
多叉树就是节点可以是m个,能有效地减少高度,高度变小后,节点变少i/o自然少,性能比二叉树好了
b树
b树简单地说就是多叉树,每个叶子会存储数据,和指向下一个节点的指针。
例如要查找9,步骤如下
b+树
b+树是b树的改进,简单地说是:只有叶子节点才存数据,非叶子节点是存储的指针;所有叶子节点构成一个有序链表
b+树的内部节点并没有指向关键字具体信息的指针,因此其内部节点相对b树更小,如果把所有同一内部节点的关键字存放在同一盘块中,那么盘块所能容纳的关键字数量也越多,一次性读入内存的需要查找的关键字也就越多,相对io读写次数就降低了
例如要查找关键字16,步骤如下
b+树与b树的不同:
这就是mysql使用b+树的原因,就是这么简单!
以上就是mysql 使用b+树索引有哪些优势的详细内容,更多关于mysql 使用b+树索引的资料请关注服务器之家其它相关文章!
原文链接:https://www.cnblogs.com/chenqionghe/p/14295404.html
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
前言由于MySQL的索引中最重要的数据结构就是B+树,所以前面我们先大概讲讲B+树的原理B+Tree原理1.数据结构BTree指的是BalanceTree,也就
前言在mysql中,无论是innodb还是myisam,都使用了b+树作索引结构(这里不考虑hash等其他索引)。本文将从最普通的二叉查找树开始,逐步说明各种树
Q1:数据库有哪些索引?优缺点是什么?1.B树索引:大多数数据库采用的索引(innoDB采用的是b+树)。能够加快访问数据的速度,尤其是范围数据的查找非常快。缺
B-树是一种常见的数据结构。和他一起的还有B+树。在这里,需要澄清一下概念。B树,B-树,B+树有什么区别?他们有什么关系呢?其实,从数据结构来讲只有2种,也就
为什么要分表Mysql是当前互联网系统中使用非常广泛的关系数据库,具有ACID的特性。但是mysql的单表性能会受到表中数据量的限制,主要原因是B+树索引过大导