B+树

特点

  • B+树构建是根据主键值进行排序构建的。子上向下生长,根节点一直不变
  • 所有真实数据项均放在叶子节点中,非叶子节点中存放数据项索引,只存放键值和页号(页地址)
  • 内节点数据项的唯一性,一个页至少有两个数据记录。
  • 页内是使用单链表,页间使用双链表
  • 树高度一般不超过四层

优点

  • B+树对于主键(排序键)的排序查找和范围查找速度非常快,因为链表的数据结构。
  • 按照B+树排列顺序,查询显示一定范围数据的时候,由于数据都是紧密相连,数据库不用从多个数据块中提取数据,所以节省了大量的io操作。

缺点

  • 插入速度严重依赖于插入顺序,按照主键的顺序插入是最快的方式,否则将会出现页分裂,严重影响性能。
  • 更新主键的代价很高,因为将会导致被更新的行移动。

聚簇索引和非聚簇索引

如果我们想以别的列作为搜索条件该怎么办呢?

答案:我们可以多建几棵B+树,不同的B+树中的数据采用不同的排序规则。比方说我们用c2列的大小作为数据页、页中记录的排序规则,再建一棵B+树(非聚簇索引),效果如下图所示:

非聚簇索引的叶子节点不再是所有数据,而是包括主键值和被搜索的列值。通过被索引的值找到叶子节点后获取主键值,再通过聚簇索引找到目标数据项。

当非聚簇索引排序的值相同时,通常使用主键值加以区分排序,所以MySQL中的InnoDB,在非聚簇索引中至少包含主键值和被搜索的列值。

对比

  • 聚簇索引的叶子节点存储的就是我们的数据项,非聚簇索引的叶子节点存储的是数据位置。非聚簇索引不会影响数据表的物理存储顺序。
  • 一个表只能有一个聚簇索引,因为只能有一种排序存储的方式,但可以有多个非聚簇索引,也就是多个索引目录提供数据检索。
  • 使用聚簇索引的时候,数据的查询效率高,但如果对数据进行插入,删除,更新等操作,效率会比非聚簇索引低。

关于二级索引:

二级索引访问需要两次索引查找,第一次通过非聚簇索引找到主键值,第二次根据主键值找到数据项.

哈希表和B+树

  • 哈希表不能查找范围值
  • 哈希无序
  • 无法对单个或者多个进行查询
  • 重复值多的话会降低效率

B树

特点

  • 叶子节点和非叶子节点都存放数据项
  • 本质还是在全域上进行二分查找

B+和B

  • B+有k个孩子的节点就有k个关键字。也就是孩子数量=关键字数,而B树中,孩子数量=关键字数+1
  • B+非叶子节点的关键字也会同时存在在子节点中,并且是在子节点中所有关键字的最大(或最小),B树中非叶子节点关键值是叶子节点中值
  • B+非叶子节点仅用于索引,不保存数据记录,跟记录有关的信息都放在叶子节点中。而B树中,非叶子节点既保存索引,也保存数据记录
  • B+所有关键字都在叶子节点出现,叶子节点构成一个有序链表,而B树是按照叶子节点本身关键字从小到大顺序构建。造成在数据库范围查找时,B+树直接根据链表依次取出就行了,但是B树中只能查后继节点,比较繁琐。

数据库中的B树和B+树相关推荐

  1. 怎么看b树是几阶_数据库原理基础:设计B树与B+树的目的以及二者的优劣

    大家好,这里是IT技术百货,专注于有价值的IT技术知识分享: 今天跟大家分享数据库中的关键数据结构,B树与B+树 什么是B树 B树是一个满足以下条件的多叉树,一棵m阶B树满足如下条件: 每一个节点最多 ...

  2. 递归查询数据库中树状数据

    通过sql函数去对数据库中的树状数据进行操作 表结构 1.sql 形式 自定义一个函数getChildList(rootId INT)通过根Id遍历他的子节点 自定义函数 DELIMITER // C ...

  3. B+树:MySQL数据库中建立索引的数据结构

    在MySQL数据库中是通过B+树的数据结构建立索引的. 相比二叉树,B树是一种多叉树,总层数更少,磁盘io次数也会相应减少.而与B树不同的是,B+树把索引和数据分开存储,数据以链表的形式存放在B+树的 ...

  4. java 数据库 树_在数据库中保存树数据(族树)

    我正在尝试存储一棵家谱 . 这是我正在使用的平台,Zend框架,Mysql,Ajax我搜索了stackoverflow我遇到过这篇文章,这对于处理对象方面的数据非常有帮助 . 我将简要说明我的用例 . ...

  5. mysql查询父子关系树_swt 生成树[读取Mysql数据库中的父子关系表]

    数据库中的表结构: id        pid 1         0 2         1 3         1 4         2 6         2 5         4 需要生成 ...

  6. java中菜单的数据库_java将数据库中菜单表中内容转化成一个导航树

    数据库中字段: menuId   parentMenuId    menuName   link等 首先我们肯定是将所有的菜单从数据库中查到一个List中,下面我们需要对这个数组进行处理,将这个lis ...

  7. 数据库索引数据结构总结——ART树就是前缀树

    数据库索引数据结构总结 from:https://zhewuzhou.github.io/2018/10/18/Database-Indexes/ 摘要 数据库索引是数据库中最重要的组成部分,而索引的 ...

  8. mysql 视图树查询_TreeView (树视图)遍历数据库的方法

    多数从事数据库编程人员都经历过,对新接触的数据库技术无论是低版本Foxbase.Access97-2000还是支持网络环境高版本的Sql Server2000和 Oracel等系统,都经过一个循循渐进 ...

  9. 3层b+树索引访问磁盘次数_从B+树到LSM树,及LSM树在HBase中的应用

    点击上方蓝色字体,选择"设为星标" 回复"资源"获取更多资源 大数据技术与架构点击右侧关注,大数据开发领域最强公众号! 暴走大数据点击右侧关注,暴走大数据! 前 ...

最新文章

  1. SSH框架是个怎么回事?(转)
  2. linux mint 时间不对,LinuxMint 20:发布日期和新功能
  3. TClientDataSet[27]: 字段值的约束(或叫输入限制)
  4. 通用职责分配软件原则之8-中介原则
  5. nodejs 遍历json数据_PostgreSQL 务实应用(四/5)JSON
  6. CodeBlocks使用第三方库(以使用pcre库为例)
  7. 堆排序实现(C++)
  8. 从头学习Drupal--基本架构三
  9. 基于华为产品的高校云数据中心建设规划设计方案
  10. 苹果ipa签名工具免越狱下载_苹果签名——超级篇
  11. Linux dev是什么文件,linux dev文件详解
  12. 分层聚类(Hierarchical clustering)
  13. vue中使用echart实现三维立体图
  14. 44444444444444
  15. 一个用在手机上的简单js拖拽效果
  16. 4.如何靠IT逆袭大学?
  17. 树莓派与声音传感器 python
  18. SSM源码分析之Spring02-Spring源码分析前瞻
  19. 顺序结构、选择结构、循环结构
  20. 转接IC整理汇总 转接芯片大全

热门文章

  1. 自媒体短视频有哪些软件制作,自媒体短视频用什么工具
  2. sql 按照天环比_SQL 查询同比,环比
  3. fdisk -l文件详解
  4. JAVA_KEYTOOL_生成秘钥_一蓑烟雨任平生
  5. 运输公司对用户计算运费.路程越远每公里运费越低.每公里每吨货物的基本运费p = 3;用户需要输入货物重量w和距离s;根据距离的不同折扣d不同(具体见)下面的表格,要求根据用户输入的w和s,计算出总运费
  6. Cisco 9800 WLC PID
  7. STM32串口调试,调试助手没有打印信息?
  8. Python xml 读取之 ET.parse
  9. Bootstarp4总节(2)
  10. 加高花园床市场现状分析