mysql中索引数据结构简介

mysql中索引数据结构简介

一、简介

mysql索引数据结构是树,常用的存储引擎innodb,聚簇索引采用B+树(也是存储结构),非聚簇索引也是B+树(只是叶子结点存储值不一样)。这里对各类查找对进行介绍。

二、各种查找树

2.1 二叉排序树

二叉排序树,也称为二叉查找树,是最简单的查找树,特点:

  • 是一棵二叉树;

  • 左子树所有结点的值小于它的父结点的值,右子树所有结点的值大于它的父结点的值。

2.2 平衡二叉树

平衡二叉树(又称AVL树),是二叉排序树的基础上,对树的深度进行了限制,从而减少了查找比较的次数,特点:

  • 是一棵二叉树;

  • 左子树所有结点的值小于它的父结点的值,右子树所有结点的值大于它的父结点的值;

  • 左子树与右子树的深度差在-1、0、1内,否则对子树进行旋转调整。

2.3 B-树

B-树(B-Tree),是多路平衡查找树,相对于平衡二叉树,对父结点的直接子结点个数,不再仅限于2,可以指定m(自定义),这样可以在树的深度不大量增加的前提下,保存更多的结点。B-树是通常在文件系统中使用。特点:

  • 树的每个结点最多有m(自定义)子结点;
  • 若根结点不是叶子结点,则至少有两个子结点;
  • 除根结点外的所有非叶子结点,至少有m/2上取整个子结点;
  • 父结点下的最左边子树所有结点的值均小于父结点最小值,最右边子树所有结点的值均大于父结点最大值,其余中间子树所有结点的值则介于指针的父结点两边的值;
  • 所有叶子结点都在同一层;

注意:所有结点均带有值

2.4 B+树(B+Tree)

B+树(B+Tree),是B-树变体,相对于B-树,叶子结点的值包含了所有的值,所有父结点的值是重复了叶子结点的值,父结点只起索引查找的作用,同时所叶子结点也也构成了一条有序的链表。
mysql中存储引擎为innodb的索引,采用的数据结构即是B+树。
特点:

  • 有m个子结点的父结点就有m个关键字;
  • 所有叶子结点包含了所有关键字(值),且构成由小到大的有序链表;
  • 所有非叶子结点起索引作用,结点仅包含子树所有结点的最大值;
  • 所有叶子结点都在同一层;

注意:叶子结点包含了所有的关键字(值)。

2.5 B*树(B*Tree)

B*树(B*Tree),是B+树的变体,相对B+树,增加了对同一层非叶子结点的指针,即同一层非叶子结点也构成了一条链表。

三、总结

综上,上述各种查找树是相互关联的。
归结到mysql中innodb索引,聚簇索引采用B+树,是通过主键来聚集数据,这既是一种索引,也是mysql的数据存储结构,叶子结点包含了所有的数据,非叶子结点仅起索引作用(若没有定义主键,则innodb会隐式定义一个主键来作为聚簇索引)。非聚簇索引叶子结点存储索引字段和主键值(也就是指向数据的指针)。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值