返回顶部
首页 > 资讯 > 数据库 >MySQL中B+Tree如何使用
  • 816
分享到

MySQL中B+Tree如何使用

2024-04-02 19:04:59 816人浏览 独家记忆
摘要

本篇文章为大家展示了Mysql中B+Tree如何使用,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。B+ treeB+ tree 实际上是一颗m叉平衡查找树(不是二叉

本篇文章为大家展示了Mysql中B+Tree如何使用,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。

B+ tree

B+ tree 实际上是一颗m叉平衡查找树(不是二叉树)

平衡查找树定义:树中任意一个节点的左右子树的高度相差不能大于 1

MySQL中B+Tree如何使用
 public class BPlusTreenode {   // 5叉树   public static int m = 5;    // 键值,用来划分数据区间   public int[] keyWords = new int[m-1];    // 保存子节点指针   public BPlusTreeNode[] children = new BPlusTreeNode[m]; }  public class BPlusTreeLeafNode {   public static int k = 3;    // 数据的键值   public int[] keywords = new int[k];    // 数据地址   public long[] dataAddress = new long[k];    // 这个结点在链表中的前驱结点   public BPlusTreeLeafNode prev;    // 这个结点在链表中的后继结点    public BPlusTreeLeafNode next; }

在B+ 树中,树中的节点并不存储数据本身,而是只是作为索引。除此之外,所有记录的节点按大小顺序存储在同一层的叶节点中,并且每个叶节点通过指针连接。

总结下,B+树有以下特点

  1. 鸿蒙官方战略合作共建——HarmonyOS技术社区

  2. B  +树的每个节点可以包含更多节点,其原因有两个,其一是降低树的高度(索引不会全部存储在内存中,内存中可能撑不住,所以一般都是将索引树存储在磁盘中,只是将根节点放到内存中,这样对每个节点的访问,实际上就是访问磁盘,树的高度就等于每次查询数据时磁盘  io 操作的次数),另一种是将数据范围更改为多个间隔。间隔越大,数据检索越快(可以想象跳表)

  3. 每个节点不在是存储一个key,而是存储多个key

  4. 叶节点来存储数据,而其他节点用于索引

  5. 叶子节点通过两个指针相互链接,顺序查询性能更高。

这样设计还有以下优点:

B +树的非叶子节点仅存储键,占用很小的空间,因此节点的每一层可以索引的数据范围要宽得多。换句话说,可以为每个IO操作搜索更多数据

叶子节点成对连接,符合磁盘的预读特性。例如,叶节点存储50和55,它们具有指向叶节点60和62的指针。当我们从磁盘读取对应于50和55的数据时,由于磁盘的预读特性,我们将顺便提一下60和62。读出相应的数据。这次是顺序读取,而不是磁盘搜索,加快了速度。

支持范围查询,局部范围查询非常高效,每个节点都可以索引更大,更准确的范围,这意味着B +树单磁盘IO信息大于B树,并且I / O效率更高

由于数据存储在叶节点层中,并且有指向其他叶节点的指针,因此范围查询仅需要遍历叶节点层,而无需遍历整个树。

由于磁盘访问速度和内存之间存在差距,为了提高效率,应将磁盘I /  O最小化。磁盘通常不是严格按需读取的,而是每次都被预读。磁盘读取所需的数据后,它将向后读取内存中的一定长度的数据。这样做的理论基础是计算机科学中众所周知的本地原理:

B-Tree

B-Tree实际上也是一颗m叉平衡查找树

MySQL中B+Tree如何使用
  1. 鸿蒙官方战略合作共建——HarmonyOS技术社区

  2. 所有的key值分布在整个树中

  3. 所有的key值出现在一个节点中

  4. 搜索可以在非叶子节点处结束

  5. 在完整的关键字搜索过程中,性能接近二分搜索。

B树和B+树之间的区别

  1. 鸿蒙官方战略合作共建——HarmonyOS技术社区

  2. B +树中的非叶子节点不存储数据,并且存储在叶节点中的所有数据使得查询时间复杂度固定为log n。

  3. B树查询时间的复杂度不是固定的,它与键在树中的位置有关,最好是O(1)。

  4. 由于B+树的叶子节点是通过双向链表链接的,所以支持范围查询,且效率比B树高

  5. B树每个节点的键和数据是一起的

为什么MongoDB使用B-Tree,Mysql使用B+Tree ?

B +树中的非叶子节点不存储数据,并且存储在叶节点中的所有数据使得查询时间复杂度固定为log  n。B树查询时间复杂度不是固定的,它与键在树中的位置有关,最好是O(1)。

我们已经说过,尽可能少的磁盘IO是提高性能的有效方法。mongoDB是一个聚合数据库,而B树恰好是键域和数据域的集群

至于为什么MonGoDB使用B树而不是B +树,可以从其设计的角度考虑它。  MongoDB不是传统的关系数据库,而是以BSON格式(可以认为是JSON)存储的NoSQL。目的是高性能,高可用性和易于扩展。

mysql是关系型数据库,最常用的是数据遍历操作(join),而MongoDB它的数据更多的是聚合过的数据,不像Mysql那样表之间的关系那么强烈,因此MongoDB更多的是单个查询。

由于Mysql使用B+树,数据在叶节点上,叶子节点之间又通过双向链表连接,更加有利于数据遍历,而MongoDB使用B树,所有节点都有一个数据字段。只要找到指定的索引,就可以对其进行访问。毫无疑问,单个查询MongoDB平均查询速度比Mysql快。

Hash索引

简而言之,哈希索引使用某种哈希算法将键值转换为新的哈希值。不需要像B  +树那样从根节点到叶节点逐步搜索。只需要一种哈希算法,就可以立即找到对应的位置,速度非常快。(此处可以想想Java中的HashMap)。

B+树索引和Hash索引的区别

1.如果是等价查询,则哈希索引显然具有绝对优势,因为只需一种算法即可找到相应的键值;当然,前提是键值是唯一的,如果存在hash冲突就必须链表遍历了。

  • 哈希索引不支持范围查询(不过改造之后可以,Java中的LinkedHashMap通过链表保存了节点的插入顺序,那么也可以使用链表将数据的大小顺序保存起来)

2.这样做虽然支持了范围查询但是时间复杂度是O(n),效率比跳表和B+Tree差

3.哈希索引无法使用索引排序以及模糊匹配

4..哈希索引也不支持多列联合索引的最左边匹配规则。

5.键值大量冲突的情况下,Hash索引效率极低

上述内容就是MySQL中B+Tree如何使用,你们学到知识或技能了吗?如果还想学到更多技能或者丰富自己的知识储备,欢迎关注编程网数据库频道。

您可能感兴趣的文档:

--结束END--

本文标题: MySQL中B+Tree如何使用

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

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

猜你喜欢
  • MySQL中B+Tree如何使用
    本篇文章为大家展示了MySQL中B+Tree如何使用,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。B+ treeB+ tree 实际上是一颗m叉平衡查找树(不是二叉...
    99+
    2024-04-02
  • mysql中B+Tree和B-Tree有什么区别
    这篇文章给大家介绍mysql中B+Tree和B-Tree有什么区别,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。1、B-树的关键词和记录放在一起,叶节点可以看作是外部节点,不包含任何信息;B+树的非叶节点只有关键词和指...
    99+
    2023-06-15
  • mysql为什么使用b-tree
    mysql使用b-tree作为索引结构的主要原因有以下几点:1、高效的平衡性,B-tree是一种自平衡的树状数据结构,能够自动调整树的结构以保持平衡;2、适应磁盘存储特性,B-tree的节点大小通常设置与页的大小相同,使得一个节点即可加载到...
    99+
    2023-07-28
  • MySQL中B+ Tree的原理分析
    这篇文章主要介绍MySQL中B+ Tree的原理分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!前言由于MySQL的索引中最重要的数据结构就是B+树,所以前面我们先大概讲讲B+树的...
    99+
    2024-04-02
  • mysql中B+Tree索引的作用是什么
    本篇文章给大家分享的是有关mysql中B+Tree索引的作用是什么,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。1、概念B+Tree是在B-Tree基础上的一种优化,使其更适合...
    99+
    2023-06-15
  • MySQL索引要用B+tree的原因
    了解MySQL索引要用B+tree的原因?这个问题可能是我们日常学习或工作经常见到的。希望通过这个问题能让你收获颇深。下面是小编给大家带来的参考内容,让我们一起来看看吧!当你现在遇到了一条慢 SQL 需要进...
    99+
    2024-04-02
  • MySQL使用B+Tree当索引的优势有哪些
    数据库为什么需要索引呢? 我们都是知道数据库的数据都是存储在磁盘上的,当我们程序启动起来的时候,就相当于一个进程运行在了机器的内存当中。所以当我们程序要查询数据时,必须要从内存出来到磁盘里面去查找数据,然后将数据写...
    99+
    2022-05-26
    MySQL 索引 MySQL B+tree MySQL B+tree索引优势
  • MySQL中Hash与B-Tree的区别是什么
    MySQL中Hash与B-Tree的区别是什么,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。  MySQL Hash索引结构的...
    99+
    2024-04-02
  • Bootstrap中如何使用Tree View
    这篇文章主要介绍Bootstrap中如何使用Tree View,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!A simple and elegant solution to disp...
    99+
    2024-04-02
  • Linux中如何使用tree命令
    这篇文章将为大家详细讲解有关Linux中如何使用tree命令,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。Linux常用命令tree命令用于以树状图列出目录的内容,执行tree指令,它会列出指定目录下的所...
    99+
    2023-06-28
  • cmd中如何使用tree命令
    这篇文章主要介绍cmd中如何使用tree命令,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!当你向别人展示你自己所做光盘的内容的时候,或者是罗列你硬盘上某个目录下的资料的时候,tree命令显得相当方便,并且能让你展示的...
    99+
    2023-06-09
  • Oracle中B-Tree、Bitmap和函数索引使用案例总结
    目录 一、索引简介 1、索引是一个独立的数据库对象,和数据表table一样。在Oracle中,数据库对象object都是通过段segment结构表示。我们在数据字典dba_seg...
    99+
    2024-04-02
  • MySQL中的B-Tree引索与Hash引索有区别吗
    MySQL中的B-Tree引索与Hash引索有区别吗?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。MySQL中B-Tree引索...
    99+
    2024-04-02
  • mysql中B+Tree索引和Hash索引有什么区别
    这篇文章主要为大家展示了“mysql中B+Tree索引和Hash索引有什么区别”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“mysql中B+Tree索引和Hash索引有什么区别”这篇文章吧。1、...
    99+
    2023-06-15
  • tree命令如何在linux中使用
    本篇文章给大家分享的是有关tree命令如何在linux中使用,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。tree命令,主要功能是创建文件列表,将所有文件以树的形式列出来lin...
    99+
    2023-06-09
  • linux系统中如何使用tree命令
    这篇文章给大家分享的是有关linux系统中如何使用tree命令的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。Linux tree命令用于以树状图列出目录的内容,执行tree指令,它会列出指定目录下的所有文件,包括...
    99+
    2023-06-28
  • b站如何使用git
    近年来,越来越多的程序员和开发者开始使用Git来管理和协组他们的开发项目。而对于B站当中的开发者来说,Git也是非常重要的工具之一。在这篇文章中,我们将会详细介绍B站如何使用Git。什么是Git?首先,我们需要先了解一下Git是什么。Git...
    99+
    2023-10-22
  • MySQL为什么使用B+树,而不是B树?
    在MySQL中,B+树被广泛应用于索引结构,因为它支持高效的范围查询和区间扫描,并且有助于减少磁盘I/O操作,从而提高查询效率。为什么MySQL使用B+树而不是B树?主要有以下几个原因: 1、B+树可以更好地利用磁盘预读特性 在数据库中,...
    99+
    2023-09-21
    mysql 数据库
  • 如何使用vue-element Tree树形控件
    小编给大家分享一下如何使用vue-element Tree树形控件,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!通过tree树形控件的default-checked-keys属性来设置默认...
    99+
    2024-04-02
  • Linux下tree命令如何安装使用
    这篇文章给大家分享的是有关Linux下tree命令如何安装使用的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。Linux tree命令用于以树状图列出目录的内容,执行tree指令,它会列出指定目录下的所有文件,包括...
    99+
    2023-06-28
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作