一、B-Tree

B-Tree结构的1数据可以让系统高效的找到数据所在的磁盘块

为了描述B-Tree,我们先定义一条数据记录为一个二元组[key,data],key为记录的键值,对于不同数据记录,key是互不相同的,data为key对应的值,m阶的B-Tree是满足下列条件的数据结构

1.每个节点最多拥有m个子树

2.根节点至少有两个子树

3.分支节点至少拥有m/2颗子树(除根节点和叶子节点外的都是分支节点)

4.所有叶子节点都在同一层,每个节点最多可以有m-1个key,并且以升序排列

每个节点占用一个磁盘块,一个节点上有两个升序排序的关键字和三个指向子树根节点的指针,指针存储的是子节点所在磁盘块的地址。两个关键词划分成的三个范围域对应三个指针指向的子树的数据的范围域。

以根节点为例,关键字为 17 和 35,P1 指针指向的子树的数据范围为小于 17,P2 指针指向的子树的数据范围为 17~35,P3 指针指向的子树的数据范围为大于 35。模拟查找关键字 29 的过程:

根据根节点找到磁盘块 1,读入内存。【磁盘 I/O 操作第 1 次】

比较关键字 29 在区间(17,35),找到磁盘块 1 的指针 P2。

根据 P2 指针找到磁盘块 3,读入内存。【磁盘 I/O 操作第 2 次】

比较关键字 29 在区间(26,30),找到磁盘块 3 的指针 P2。

根据 P2 指针找到磁盘块 8,读入内存。【磁盘 I/O 操作第 3 次】

在磁盘块 8 中的关键字列表中找到关键字 29。

B-Tree存在的问题:

(1)每个节点中有key,也有data,而每一个页的存储空间是有限的,如果data数据较大时就会导致每个节点(即一个页)能存储的key的数量很小

(2)当存储的数据量很大时,同样1会导致B-Tree的深度较大,增加查询时的磁盘I/O次数,进而影响查询效率

二、B+Tree

B+Tree是在B-Tree基础上的一种优化,innoDB存储引擎就是用B+Tree实现其索引结构的

B+Tree中,所有数据记录节点都是按照键值大小顺序存放在同一层的叶子节点上,而非叶子节点上只存储key值信息,这样可以大大加大每个节点存储的key值数量,降低B+Tree的高度,变化点:

(1)数据是存在叶子节点中的

(2)数据节点之间是有指针指向的

通常在B+Tree上有两个头指针,一个指向根节点,另一个指向关键字最小的叶子结点,而且所有叶子节点(即数据节点之间是一种链式环结构),因此可以对B+Tree进行两种查找运算

(1)对于主键的范围查找和分页查找

(2)从根节点开始,进行随机查找

关于Mysql的数据引擎

InnoDB和MyISAM的索引的底层实现都是通过B+Tree来实现的

1、InnoDB中的B+Tree

InnoDB是通过B+Tree结构对ID建索引,然后在叶子节点中存储记录,采用InnoDB引擎的数据存储文件有两个,一个定义文件,一个数据文件。若建索引的字段不是主键ID,则对该字段建索引,然后在叶子节点中存储的是该记录的主键,然后通过主键索引来找到对应的记录

2、MyIsam中索引和数据分别存放在不同的文件,所以在索引树中的叶子节点中存放的数据是该索引对应的数据记录的地址,由于数据与索引不在一起,所以MyIsam是非聚簇索引

mysql 怎么创建B Tree索引_B-Tree,B+Tree以及mysql索引的实现相关推荐

  1. mysql怎么创建窗口应用程序_在NetBeans中使用MySQL创建简单Web应用程序(二)

    既然数据层已经准备就绪,我们开始在适当的位置放置Java类.逻辑层由三个类组成:SubjectName.java.SubjectCounselor.java和AccessDB.java.这几个类提供两 ...

  2. 阿里云rds for mysql平台介绍_阿里云RDS for MySQL实例创建账号和数据库?

    本文介绍如何为RDS for MySQL实例创建账号和数据库. 账号类型RDS for MySQL实例支持两种数据库账号:高权限账号和普通账号.您可以在控制台管理所有账号和数据库,账号拥有的具体权限请 ...

  3. 在MySQL中创建视图的X种方式

    在本教程中,您将学习如何使用CREATE VIEW语句在MySQL中创建视图. CREATE VIEW语句简介 要在MySQL中创建新视图,请使用CREATE VIEW语句. 在MySQL中创建视图的 ...

  4. mysql 中创建自增的序列(Sequence)

    需求: 业务开发一个时间轴功能,时间轴上展示多个表的数据,时间轴滚动刷新. 问题: 获取多个表中的前几条数据比较麻烦,需要将多个表的数据拿出来排序然后limit 取数据.这样多表取数据如果数据量大很麻 ...

  5. mysql 怎么创建B Tree索引_MySQL为什么选择B+Tree做索引

    MySQL为什么选择B+Tree? 首先理解MySQL索引的几个原则 是为了加速对表中数据行的检索而创建的一种分散存储的数据结构. 工作机制 如上图:以id创建索引,索引数据结构里存储了索引键(关键字 ...

  6. mysql索引为什么使用B+tree,InnoDB与MyISAM 的区别

    文章目录 1. 索引的作用? 2. 索引有哪些数据结构 ①:Hash ①:二叉树 ②:红黑树 ③:B-Tree ④:B+Tree 3. B+Tree与B-Tree的区别 4. InnoDB 和 MyI ...

  7. 常见面试题:为什么MySQL索引要用B+Tree呢?(看完你就能和面试官笑谈人生了)

    title: 常见面试题:为什么MySQL索引要用B+Tree呢?(看完你就能和面试官笑谈人生了) tags: 面试常见题 常见面试题:为什么MySQL索引要用B+Tree呢?(看完你就能和面试官笑谈 ...

  8. mysql b tree图_MySQL索引--B-Tree(B+Tree)图文详解

    看了很多关于索引的博客,讲的大同小异.但是始终没有让我明白关于索引的一些概念,如B-Tree索引,Hash索引,唯一索引....或许有很多人和我一样,没搞清楚概念就开始研究B-Tree,B+Tree等 ...

  9. mysql手机客户端_图解MySQL索引--B-Tree(B+Tree)

    看了很多关于索引的博客,讲的大同小异.但是始终没有让我明白关于索引的一些概念,如B-Tree索引,Hash索引,唯一索引....或许有很多人和我一样,没搞清楚概念就开始研究B-Tree,B+Tree等 ...

  10. MySQL的存储引擎InnoDB,B+Tree数据结构索引的实现原理图(聚簇索引/聚集索引)

    1.表数据文件本身就是按B+Tree组织的一个索引结构文件 2.InnoDB的B+Tree的索引数据结构中,表数据和索引数据合并在一起,即叶子节点包含了完整的数据记录,这样的索引叫聚簇索引.

最新文章

  1. 交通优化需求下 智能交通已达千亿市场
  2. python表示不服怎么办_10万+的短视频被批量生产了,Python表示不服!
  3. 设计模式实战 - 责任链模式
  4. python这个软件学会能做什么工作-学会Python真的有高收入?盯,请查收这份入坑指南...
  5. 成本直降50%,下一代网关震撼发布
  6. 懂你的里程银行,大数据为川航提升用户时代的流量变现力
  7. QT的QMenuBar类的使用
  8. URI和URLConnection类的区别
  9. 使用gparted-LiveCD对centos分区调整---virtualbox磁盘调整序2
  10. 计算机网络协议包头赏析-TCP
  11. C语言实现树,你一定看得懂
  12. RuoYi-Cloud 登陆 /code 获取验证码出错
  13. Linux——网络地址临时配置(详细步骤+问题解决)
  14. [spring boot]idea中实现热部署的方法
  15. 引用管理器没有程序集_程序员必背英语单词不会,就别说你是程序员!
  16. 在线的pdf阅读器(javaweb)
  17. 酷派大观4 8970 刷android 4.4,酷派5890驱动 酷派 8970L(大观4)recovery卡刷通用刷机教程...
  18. 1+x 云计算平台运维与开发测试题
  19. 23种模式——策略模式
  20. 一个游戏创业者如何跳出模式

热门文章

  1. ERROR 1201 (HY000) Could not initialize master info structure
  2. Linux(ubuntu 18.0.4) Java环境安装,环境变量配置
  3. 基于spring reactor3构建的即时通讯api。
  4. 366 斐波那契数列
  5. 为什么我tracert经过H3C设备的时候,老是*号,不回包
  6. ES6中Number中的扩展
  7. Cell右滑的动作状态
  8. c#socket编程 (转)
  9. 内联失败函数变成static函数的一些问题
  10. excel怎么下方方格子_Excel重复值的坑,你踩过几个?