广告
返回顶部
首页 > 资讯 > 数据库 >说说B+ Tree
  • 259
分享到

说说B+ Tree

2024-04-02 19:04:59 259人浏览 泡泡鱼
摘要

先看下B+ Tree数据结构的特点(From Wikipedia).1. The primary value of a B+ tree is in storing data for efficient re

先看下B+ Tree数据结构的特点(From Wikipedia).

1. The primary value of a B+ tree is in storing data for efficient retrieval in a block-oriented storage context - in particular, filesystems.


2. B+ trees have very high fanout(number of pointers to child nodes in a node, typically on the order of 100 or more), which reduces the number of I/O operations required to find an element in the tree.


对于第2点, 看看下图, 每个结点都含有指向下一层的指针, 指针越多, 意味着树的高度就越矮, 即在块设备(常见的就是磁盘)中检索数据, 需要的I/O次数也就越少.

说说B+ Tree


Mysql中, 不同的存储引擎, 使用B+ Tree数据结构, 形成了各自存储数据的方式. 对于InnoDB存储引擎来说, 是Clustered index(聚簇索引)的存储方式, (在oracle中叫索引组织表, 即index-organized table). 在MyISAM存储引擎中, 就是堆表的存储方式. 下图可以较直观的反应两者数据的组织方式.

说说B+ Tree


左上方图聚簇索引中,

a. 非叶子结点存储的是, <Primary key, Pointer>.

b. 叶子结点存储的是, 一行行记录.


左下方图二级索引中,

a. 非叶子结点储存的是, <Key, Pointer>.

b. 叶子结点存储的是, <Key, Primary key>.


右图索引结构中,

a. 非叶子结点存储的是, <Key,Pointer>.

b. 叶子结点存储的是, <Pointer>, 其指向记录.


下面看看B+ Tree数据结构的efficient retrieval和high fanout特点, 在InnoDB存储引擎中是如何体现的. 以左上图为例, 假设使用Bigint数据类型(8Bytes)作为主键, 一条记录大小为400Bytes, Page大小为16K, 那么索引树高度为1, 2, 3层时, 存储的记录有多少(注, Pointer大小为6Bytes).

说说B+ Tree


现在普通的SAS盘, 一秒钟也可以完成200次I/O, 从千万量级的数据中, 检索一条记录, 只要3次I/O, 即0.015秒就行了, 可见效率之高, 又加之目前一般使用的SSD盘, 最少也要再快50倍.



最后看看两种数据存储方式的优缺点.

1. 观察第二幅图片, 在InnoDB存储引擎中使用二级索引检索数据时, 由于其叶子结点存储的是<Key, Primary key>, 在获取到Primary key时, 还要去查看聚簇索引, 即回表操作, 才能获取到记录. 而在MyISAM存储引擎中, 主键索引和二级索引具有同等地位(只不过主键索引值非空), 检索数据时, 无需回表. 也许从该点来说MyISAM存储引擎更适合查询.


2. 对于DML操作, 一条记录从400Bytes变更到600, 若不能原地更新的话, 在MyISAM存储引擎中, 索引叶子结点存储的是指向记录的指针, 相比InnoDB存储引擎来说, 其变动会更大些. 也许从该点来说InnoDB存储引擎更适合变更. 当然了, 两者为了预防非原地更新产生的影响, 都会在Page中预留空洞.


若感兴趣可关注订阅号”数据库最佳实践”(DBBestPractice).

说说B+ Tree

您可能感兴趣的文档:

--结束END--

本文标题: 说说B+ Tree

本文链接: https://www.lsjlt.com/news/35001.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 说说B+ Tree
    先看下B+ Tree数据结构的特点(From Wikipedia).1. The primary value of a B+ tree is in storing data for efficient re...
    99+
    2022-10-18
  • MySQL进阶篇(02):索引体系划分,B-Tree结构说明
    本文源码:GitHub·点这里 || GitEE·点这里 一、索引简介 1、基本概念 首先要明确索引是什么:索引是一种数据结构,数据结构是计算机存储、组织数据的方式,是指相互之间存在一种或多种特定关系的数据元素的集合,例如:链表...
    99+
    2018-11-14
    MySQL进阶篇(02):索引体系划分,B-Tree结构说明
  • 图解MySQL索引--B-Tree(B+Tree)
    【推荐】2020年最新Java电子书集合.pdf(吐血整理) >>> 看了很多关于索引的博客,讲的大同小异。但是始终没有让我明白关于索引的一些概念,如B-Tree索引,Hash索引,唯一索引....或许有很多人和我一样,没搞清楚概念就...
    99+
    2017-05-16
    图解MySQL索引--B-Tree(B+Tree)
  • mysql中B+Tree和B-Tree有什么区别
    这篇文章给大家介绍mysql中B+Tree和B-Tree有什么区别,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。1、B-树的关键词和记录放在一起,叶节点可以看作是外部节点,不包含任何信息;B+树的非叶节点只有关键词和指...
    99+
    2023-06-15
  • MySQL B-tree与B+tree索引数据结构剖析
    目录一、产生的背景1.1 进化要求二、B-tree2.1 B-tree特性三、B+tree3.1 B+tree特性四、结论一、产生的背景 二叉查找树的查找时间复杂度是O(logN),整体的查询效率已经足够高了,那么为什么...
    99+
    2022-08-22
    MySQL B-tree MySQL B+tree MySQL索引数据结构剖析
  • PostgreSQL的B-tree索引
    结构B-tree索引适合用于存储排序的数据。对于这种数据类型需要定义大于、大于等于、小于、小于等于操作符。通常情况下,B-tree的索引记录存储在数据页中。叶子页中的记录包含索引数据(keys)以及指向he...
    99+
    2022-10-18
  • java中\t,\n,\r,\b,\f的作用及说明
    目录\t,\n,\r,\b,\f 的作用结论\n\r\t\f 的区别总的概括一下\n \r \t \f的功能\t,\n,\r,\b,\f 的作用 直接输出看一下就知道了 System...
    99+
    2022-11-13
  • 浅析MysQL B-Tree 索引
    B-Tree 索引 不同的存储引擎也可能使用不同的存储结构,i如,NDB集群存储引擎内部实现使用了T-Tree结构存储这种索引,即使其名字是BTREE;InnoDB使用的是B+Tree。 B-Tree通常一位这所有...
    99+
    2022-05-22
    MysQL B-Tree 索引 MysQL B-Tree MysQL 索引
  • B-Tree的性质介绍
    B-树是一种常见的数据结构。和他一起的还有B+树。 在这里,需要澄清一下概念。B树,B-树,B+树有什么区别?他们有什么关系呢? 其实,从数据结构来讲只有2种,也就是B-树和B+树。有时候,B-树又称为B树...
    99+
    2022-10-18
  • 关于B+tree (附python 模
    前几天我写了点btree的东西(http://thuhak.blog.51cto.com/2891595/1261783),今天继续这个思路,继续写b+tree。而且b+tree才是我的目的,更加深入理解文件和数据库索引的基本原理。在之前,...
    99+
    2023-01-31
    tree python
  • 说一说Python logging
    最近有个需求是把以前字符串输出的log 改为json 格式,看了别人的例子,还是有些比较茫然,索性就把logging 整个翻了一边,做点小总结. 初看log 在程序中, log 的用处写代码的你用你知道,l...
    99+
    2022-06-04
    说一说 Python logging
  • Go语言中的红黑树、B Tree、B+Tree等基本数据结构
    Go语言中的红黑树、B树和B+树是基本的数据结构,可用于实现高效的查找、插入和删除操作。1. 红黑树(Red-Black Tree)...
    99+
    2023-10-12
    Go语言
  • 说说Keepalived的脑裂
    1. 工作场景Keepalived提供了Loadbalancing和High-Availability的功能, 本文说的是其为2个Mycat节点提供HA功能的场景.2. 关键配置如下, 为主备非抢占模式.!...
    99+
    2022-10-18
  • 再说说LOAD和SOURCE
    MySQL中导入数据的方法主要有两种: LOAD和SOURCE, 下面看看两者的特点. 测试过程中二进制日志格式, 和用到的表结构如下:(root@localhost) [(none)]> ...
    99+
    2022-10-18
  • MySQL中B+Tree如何使用
    本篇文章为大家展示了MySQL中B+Tree如何使用,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。B+ treeB+ tree 实际上是一颗m叉平衡查找树(不是二叉...
    99+
    2022-10-18
  • mysql为什么使用b-tree
    mysql使用b-tree作为索引结构的主要原因有以下几点:1、高效的平衡性,B-tree是一种自平衡的树状数据结构,能够自动调整树的结构以保持平衡;2、适应磁盘存储特性,B-tree的节点大小通常设置与页的大小相同,使得一个节点即可加载到...
    99+
    2023-07-28
  • Ant Design of Vue的树形控件Tree的使用及说明
    目录基本使用配置项异步加载数据事件进阶使用目录树右键菜单树可搜索的树高阶使用添加树节点总而言之基本使用 配置项 replaceFields 数据渲染属性依赖3个字段: titleke...
    99+
    2022-11-13
    Ant Design Vue树形控件Tree 树形控件使用
  • 说说explain中的Using filesort
    有时查看SQL的执行计划时, 会遇到Using filesort, 如下.mysql> explain select * from tb1 where col1 = 4 order...
    99+
    2022-10-18
  • MySQL中B+ Tree的原理分析
    这篇文章主要介绍MySQL中B+ Tree的原理分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!前言由于MySQL的索引中最重要的数据结构就是B+树,所以前面我们先大概讲讲B+树的...
    99+
    2022-10-18
  • InnoDB--------查询IOT B+ Tree的高度
    1. 背景   * 在InnoDB存储引擎中,表都是根据主键顺序组织存放的,这种存储方式的表称为索引组织表(index organized table IOT)。   ...
    99+
    2022-10-18
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作