mysql为什么使用B+树

B+树结构 and 为什么

数据结构演示网页

索引结构默认使用B+树,而不是二叉树,红黑树,b树,哈希

为什么?

什么是索引

索引就是一种单独的数据结构,用来对数据库的数据进行快速检索的数据结构,他针对某个表中的一列或者多列。

简单的说就相当于图书的目录,你可以根据目录快速找到自己想要的内容

二叉树

每个根节点最多有两个子节点

二叉搜索树 – 左子树小于根节点,右子树大于父节点,二分搜索的结构化

最好情况 – logN

最坏情况 – n

红黑树

自平衡的二叉搜索树

特性:

  • 每个节点都是黑色或者红色的
  • 根节点是黑色的
  • 如果一个节点是红色,他的子节点一定是黑色
  • 从一个节点到该节点所有叶子节点的路径上包含相同数据的黑色节点
  • 所有叶子节点都是黑色的(叶子节点的值为null)

即使红黑树 也是一个二叉树,随着数据量的增多,红黑树的层级会越来越深,检索速度会越来越慢

B-树

红黑树是一个二叉树,那B树就是一个多叉树,B树每个节点有多个分支,即多叉
在这里插入图片描述

特点:

  • 在B树中,所有叶子结点和非叶子节点都会储存数据!!
  • n阶的B树只能储存n-1个key, n个指针
  • 一旦节点储存的数量达到n,就会发生裂变,中间元素向上分裂
B+树

B+树是B树的一个变种

在这里插入图片描述

和B树的区别:

  • 只有叶子结点才会储存数据!!
  • 非叶子节点只会储存索引
  • 叶子节点之间会形成一个链表,这个链表的所有元素都是有序排列的
Mysql的B+树

Mysql对经典的B+树进行了优化,在原有的基础上,增加了指向相邻叶子节点的指针,把一个单向的链表变成了双向链表,这样就更方便查找了

B+树只有叶子结点储存数据

在这里插入图片描述

为什么使用B+树

Innodb的逻辑储存结构
在这里插入图片描述

  • 表空间
  • 区 – 一个去64页, 1M
  • 页 – 一页16k ,16 * 1024
  • 行 – 数据是按行进行存放的

为什么使用B+树

  • 和二叉树相比。B+树层级更低,索引效率高

  • 和B树相比。B树和B+树的索引的叶子节点都是储存在一个页上面的,而页的大小是固定的。

    • B+树的非叶子结点只存储键值和指针,而B树连带数据一起存储。这样就导致相同大小的页,使用B树的键值和指针会变少,就会增加树的高度,增加IO次数,导致性能降低
  • 和哈希相比,B+树支持范围查找,排序查找,而哈希不支持

思考题:

假设:一行数据大小为1k,一页可以储存16行这样的数据。Innodb的指针占用6个字节的空间,键值采用BigInt,查8个字节的空间,问能储存多少数据

索引由键值和指针组成,n个键,n+1个指针

n*8 + (n+1) * 6 = 16 * 1024 , 计算得出 n = 1170

高度为2:

​ 1171 * 16 = 18736

高度为3

​ 1171 * 1171 * 16 = 21,939,856

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值