Mysql 索引 BTree 与 B+Tree 的区别(面试)

 更新时间:2022年09月27日 09:37:42   作者:阿常呓语  
这篇文章主要介绍了Mysql索引BTree与B+Tree的区别,文章围绕主题展开详细的内容介绍,具有一定的参考价值,需要的小伙伴可以参考一下

前言

​ 说起面试,很多同学都经历过,但是 面试中 可能会遇到各种问题,MySQL 的问题 也是非常多,最近我也经常面试,也希望问一些数据库一些偏理论和底层的东西,来考察同学对技术的理解程度, 之后 我会更新这个系列的 面试。

主要更新的内容主要是: 我经常面试 一些面试者 喜欢问的一些问题,这是 第一篇 就更新 数据库相关的吧

BTree 基本概念

B树。B树被称为自平衡树,因为它的节点是按顺序遍历排序的。在B树中,一个节点可以有两个以上的孩子。而且高度在每次更新时都会自动调整。在B树中,数据是按照特定的顺序排序的,最低值在左边,最高值在右边。在B树中插入数据或键,比二叉树更复杂。

Btree 的特点:

  • 节点排序,每个节点 可以存放多个元素,多个元素也是排序的
  • 每个节点 key 和数据在一起
  • B树的所有叶子节点必须在同一级别
  • 在B树的叶子节点上面,不应该有空的子树
  • 在关键字全集内做一次查找,性能逼近 二分查找的算法
  • 任何关键字出现且只出现在一个节点中
  • 搜索有可能在非叶子节点结束,因为数据和索引在一起存储的

来一个 max Degree =3 的一个图

在线生成BTree 的图形

在这里插入图片描述

B+Tree 的特点

B+tree 多路平衡查找树:

  • B+Tree 拥有BTree 的所有的结构特点
  • B+Tree 的非叶子节点不存储数据,只存储关键字,叶子节点才存储了所有的数据,并且是排好序的
  • B+Tree 叶子节点是通过指针连接在一起的(双向连接), 这样在范围查询中发挥作用
  • 相对于 Btree , B+tree 层级更低

B+Trees 特点如下:

图形生成地址

在这里插入图片描述

查找过程的区别

两种索引 查找过程的区别:

B+tree 需要找到叶子节点 才能找到数据, 而Btree 可能不需要找到叶子节点 就可以找到数据

B+Tree索引 如何提高索引的查询性能 ?

  • 找得快, 叶子节点双向指针
  • 一次IO 操作,找更多的数据,减少IO 操作,节点不存数据,只存关键字,这样可以存储更多索引的信息,B+tree 层级会降低

为啥 B+Tree 会比 BTree 高度要低呢?

页(Page)是Mysql中磁盘和内存交换的基本单位, 也是Mysql管理存储空间的基本单位。

Page 是InnoDB存储引擎磁盘管理的最小单位,每个页默认16KB,innodb_page_size 可以通过这个参数进行修改

B+Tree 中的非叶子节点 不存储数据, 只存关键字,所以一个Page 中可以容纳更多的索引项, 一是可以降低树的高度,二是 在一个内部节点中可以定位更多的叶子节点。

到此这篇关于Mysql 索引 BTree 与 B+Tree 的区别(面试)的文章就介绍到这了,更多相关Mysql BTree与B+Tre内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • MySQL运行在docker容器性能损失解析

    MySQL运行在docker容器性能损失解析

    这篇文章主要为大家介绍了MySQL运行在docker容器中的性能损失解析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-11-11
  • MySQL的事务特性概念梳理总结

    MySQL的事务特性概念梳理总结

    这篇文章主要介绍了MySQL的事务特性概念梳理总结,文章围绕主题展开详细的内容介绍,具有一定的参考价值,需要的朋友可以参考一下
    2022-07-07
  • MySQL将多条数据合并成一条的完整示例

    MySQL将多条数据合并成一条的完整示例

    我们在使用mysql的时候常会遇到合并的需求,下面这篇文章主要给大家介绍了关于MySQL将多条数据合并成一条的相关资料,文中通过图文介绍的非常详细,需要的朋友可以参考下
    2023-02-02
  • CMS不要让MySQL为你流泪

    CMS不要让MySQL为你流泪

    MySQL是中小型网站普遍使用的数据库之一,然而,很多人并不清楚MySQL到底能支持多大的数据量,再加上某些国内CMS厂商把数据承载量的责任推给它,导致很多不了解MySQL的站长对它产生了很多误解
    2008-12-12
  • Navicat Premium15连接云服务器中的数据库问题及遇到坑

    Navicat Premium15连接云服务器中的数据库问题及遇到坑

    这篇文章主要介绍了Navicat Premium15连接云服务器中的数据库问题及遇到坑,本文通过图文并茂的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-03-03
  • mysql把一段数据变成一个临时表

    mysql把一段数据变成一个临时表

    这篇文章主要介绍了mysql把一段数据变成一个临时表,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2024-02-02
  • MySQL 5.7安装后默认登录密码的查看方法

    MySQL 5.7安装后默认登录密码的查看方法

    许多朋友安装MySQL 5.7之后不知道默认登录密码在哪里查看,本文小编将通过代码示例和图文结合的方式给大家介绍MySQL 5.7安装后默认登录密码的查看方法,需要的朋友可以参考下
    2023-12-12
  • 基于unique与primary约束的区别分析

    基于unique与primary约束的区别分析

    本篇文章介绍了unique与primary约束的区别分析。需要的朋友参考下
    2013-04-04
  • 使用java处理字符串公式运算的方法

    使用java处理字符串公式运算的方法

    本篇文章介绍了,使用java处理字符串公式运算的方法。需要的朋友参考下
    2013-04-04
  • MySQL之解决字符串数字的排序失效问题

    MySQL之解决字符串数字的排序失效问题

    这篇文章主要介绍了MySQL之解决字符串数字的排序失效问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-08-08

最新评论