mysql索引的数据结构,为什么用b+树

mysql索引的数据结构,为什么用b+树,第1张

谈到索引,大家并不陌生。索引本身是一种数据结构,存在的目的主要是为了缩短数据检索的时间,最大程度减少磁盘 IO。

任何有数据的场景几乎都有索引,比如手机通讯录、文件系统(ext4\xfs\ntfs)、数据库系统(MySQL\Oracle)。数据库系统和文件系统一般都采用 B+ 树来存储索引信息,B+ 树兼顾写和读的性能,最极端时检索复杂度为 O(logN),其中 N 指的是节点数量,logN 表示对磁盘 IO 扫描的总次数。

MySQL 支持的索引结构有四种:B+ 树,R 树,HASH,FULLTEXT。

B 树是一种多叉的 AVL 树。B-Tree 减少了 AVL 数的高度,增加了每个节点的 KEY 数量。

B 树的特性:(m 为阶数:结点的孩子个数最大值)

1. 树中每个节点最多含有 m 个孩子节点 (m>=2);

2. 除根节点和叶子结点外,其他节点的孩子数量 >=ceil(m / 2);

3. 若根节点不是叶子结点,最少有两个孩子

特殊情况:没有孩子的根结点,即根结点为叶子结点,整棵树只有一个根节点;

4. 每个非叶子结点中包含有 n 个关键字信息:(n,P0,K1,P1,K2,P2,......,Kn,Pn) 其中:

Ki (i=1...n) 为关键字,且关键字按顺序升序排序 K(i-1)<Ki

Pi 为指向儿子节点的指针,且指针 P(i-1) 指向的儿子节点里所有关键字均小于 Ki,但都大于 K(i-1)

关键字的个数 n 必须满足:[ceil(m / 2)-1]<= n <= m-1

如果一个结点有 n 个关键字,那么该结点有 n+1 个分支。这 n+1 个关键字按照递增顺序排列

所有叶子结点都出现在同一层,是所有遍历的终点位置

B+ 树是一种树数据结构,是一个n叉树,每个节点通常有多个孩子,

一棵B+树包含根节点、内部节点和叶子节点。根节点可能是一个叶子节点,

也可能是一个包含两个或两个以上孩子节点的节点。

B+ 树通常用于数据库和 *** 作系统的文件系统中。

NTFS, ReiserFS, NSS, XFS, JFS, ReFS 和BFS等文件系统都在使用B+树作为元数据索引。

B+ 树的特点是能够保持数据稳定有序,

其插入与修改拥有较稳定的对数时间复杂度。B+ 树元素自底向上插入。

数据库使用的B树,而不是B+树。

使用B树的目的是为更有效的组织数据库表里的数据如何存储,按什么方式来存储,可以有利于后期对表里的数据的检索,可以快速给定关键字定位某条数据存放在哪个区,哪一页。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/9983228.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-04
下一篇 2023-05-04

发表评论

登录后才能评论

评论列表(0条)

保存