B/B+树与mysql索引

数据结构操作网站:https://www.cs.usfca.edu/~galles/visualization/Algorithms.html

B树

在这里插入图片描述

算法平均最差
空间O(n)O(n)
搜索O(log n)O(log n)
插入O(log n)O(log n)
删除O(log n)O(log n)

B+树

在这里插入图片描述

算法平均最差
空间O(n)O(n)
搜索O(log n)O(log n)
插入O(log n)O(log n)
删除O(log n)O(log n)

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

B/B+树一些区别和特点

  • B树中搜索时,离根节点近的节点找的就快,离根节点远的节点找的就慢,查找数据花费的时间不稳定。B+树所有的数据都在叶子节点,查找数据花费的时间稳定

  • B树的所有结点都存储数据;B+树只有叶子结点存储数据,非叶子结点只存储key

局部性原理

当一个数据被用到时,其附近的数据也通常会马上被使用。程序运行期间所需要的数据通常比较集中。由于磁盘顺序读取的效率很高(不需要寻道时间,只需很少的旋转时间) ,因此对于具有局部性的程序来说,磁盘预读可以提高1/0效率。预读的长度一般为页(page)的整倍数。页是计算机管理存储器的逻辑块,硬件及操作系统往往将主存和磁盘存储区分割为连续的大小相等的块,每个存储块称为一页(在许多操作系统中,页得大小通常为4k) ,主存和磁盘以页为单位交换数据。当程序要读取的数据不在主存中时,会触发一个缺页异常,此时系统会向磁盘发出读盘信号,磁盘会找到数据的起始位置并向后连续读取一页或几页载入内存中,然后异常返回,程序继续运行。

局部性原理

  • 时间局部性(Temporal Locality):如果一个信息项正在被访问,那么在近期它很可能还会被再次访问。程序循环、堆栈等是产生时间局部性的原因。

  • 空间局部性(Spatial Locality):在最近的将来将用到的信息很可能与正在使用的信息在空间地址上是临近的。

  • 顺序局部性(Order Locality):在典型程序中,除转移类指令外,大部分指令是顺序进行的。顺序执行和非顺序执行的比例大致是5:1。此外,对大型数组访问也是顺序的。指令的顺序执行、数组的连续存放等是产生顺序局部性的原因。

对于磁盘IO: 当一个数据被用到时,其附近的数据也通常会马上被使用。程序运行期间所需要的数据通常比较集中。由于磁盘顺序读取的效率很高(不需要寻道时间,只需很少的旋转时间) ,因此对于具有局部性的程序来说,磁盘预读可以提高1/0效率。预读的长度一般为页(page)的整倍数。页是计算机管理存储器的逻辑块,硬件及操作系统往往将主存和磁盘存储区分割为连续的大小相等的块,每个存储块称为一页(在许多操作系统中,页得大小通常为4k) ,主存和磁盘以页为单位交换数据。当程序要读取的数据不在主存中时,会触发一个缺页异常,此时系统会向磁盘发出读盘信号,磁盘会找到数据的起始位置并向后连续读取一页或几页载入内存中,然后异常返回,程序继续运行。

B+树适合索引

  • 相较于B树B+每个非叶子节点存储的关键字数更多,树的层级更少,磁盘IO少
  • B+树所有的叶子节点数据构成了一个有序链表,在范围区间查询数据时候更方便,数据紧密性很高,缓存的命中率也会比B树高(即局部性原理)

B+树一般几层?

innoDB 中页的默认大小是 16KB

假设一行记录的数据大小为1k,那么单个叶子节点(页)中的记录数=16K/1K=16

非叶子节点能存放多少指针?假设主键ID为bigint类型,长度为8字节,而指针大小在InnoDB源码中设置为6字节,这样一共14字节,一个页中能存放多少这样的单元,其实就代表有多少指针,即16kb/14b=1170;那么可以算出一棵高度为2的B+树,大概能存放1170*16=18720条这样的数据记录(即1170个索引,每个索引定位叶子节点的一页数据,一页能存储16行原始数据)。

根据同样的原理我们可以算出一个高度为3的B+树大概可以存放:1170*1170*16=21,902,400行数据。所以在InnoDB中B+树高度一般为1-3层,它就能满足千万级的数据存储。在查找数据时一次页的查找代表一次IO,所以通过主键索引查询通常只需要1-3次逻辑IO操作即可查找到数据。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/980378.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【智能音频新风尚】智能音频眼镜+FPC,打造极致听觉享受!【新立电子】

智能音频眼镜,作为一款将时尚元素与前沿科技精妙融合的智能设备,这种将音频技术与眼镜形态完美结合的可穿戴设备,不仅解放了用户的双手,更为人们提供了一种全新的音频交互体验。新立电子FPC在智能音频眼镜中的应用,为音…

0x02 js、Vue、Ajax

文章目录 js核心概念js脚本引入html的方式基础语法事件监听 Vuevue简介v-forv-bindv-if&v-showv-model&v-on Ajax js 核心概念 JavaScript:是一门跨平台、面向对象的脚本语言,用来控制网页行为实现交互效果,由ECMAScript、BOM、DOM…

初探WebAssembly

WebAssembly: 网页应用的性能革命 ​互联网技术日新月异,Web应用已经从简单的网页跃升为功能丰富的平台。然而,JavaScript作为Web的主力语言,在处理计算密集型任务时仍然存在性能瓶颈。今天,我们来聊一聊可能改变Web格局的技术—…

Hadoop之01:HDFS分布式文件系统

HDFS分布式文件系统 1.目标 理解分布式思想学会使用HDFS的常用命令掌握如何使用java api操作HDFS能独立描述HDFS三大组件namenode、secondarynamenode、datanode的作用理解并独立描述HDFS读写流程HDFS如何解决大量小文件存储问题 2. HDFS 2.1 HDFS是什么 HDFS是Hadoop中的一…

ctfshow刷题笔记—栈溢出—pwn61~pwn64

目录 前言 一、pwn61(输出了什么?) 二、pwn62(短了一点) 三、pwn63(又短了一点) 四、pwn64(有时候开启某种保护并不代表这条路不通) 五、一些shellcode 前言 这几道都是与shellcode有关的题,实在是…

React Native 原理

React Native 是一个跨平台移动应用开发框架,它允许开发者使用 JavaScript 和 React 来开发 iOS 和 Android 原生应用。React Native 的核心原理是通过 桥接(Bridge) 技术,使用 JavaScript 来控制原生组件,并将应用逻辑…

SwiftUI之状态管理全解析

文章目录 引言一、`@State`1.1 基本概念1.2 初始化与默认值1.3 注意事项二、`@Binding`2.1 基本概念2.2 初始化与使用2.3 注意事项三、`@ObservedObject`3.1 基本概念3.2 初始化与使用3.3 注意事项四、`@EnvironmentObject`4.1 基本概念4.2 初始化与使用4.3 注意事项五、`@Stat…

win32汇编环境,窗口程序使用树形视图示例一

;运行效果 ;win32汇编环境,窗口程序使用树形视图示例一 ;树形视图控件Treeview,就是那种点击后,会展开的控件,类似于文件夹列表。这里展示了最基本的应用,纯文本模式的展开树形视图,同时获得选中项的内容 ;字体丑了点,这里主要解释原理了,懒得设置了。直接抄进RadAsm可编…

金融支付行业技术侧重点

1. 合规问题 第三方支付系统的平稳运营,严格遵循《非银行支付机构监督管理条例》的各项条款是基础与前提,其中第十八条的规定堪称重中之重,是支付机构必须牢牢把握的关键准则。 第十八条明确指出,非银行支付机构需构建起必要且独…

FPGA开发,使用Deepseek V3还是R1(8):FPGA的全流程(简略版)

以下都是Deepseek生成的答案 FPGA开发,使用Deepseek V3还是R1(1):应用场景 FPGA开发,使用Deepseek V3还是R1(2):V3和R1的区别 FPGA开发,使用Deepseek V3还是R1&#x…

车载以太网-基于linux的ICMP协议

对于车载以太网-ICMP的技术要求: /** ICMP报文格式解析* -----------------* ICMP协议用于网络诊断和错误报告,常见应用包括Ping测试。* ICMP报文结构包括:IP头部、ICMP头部和ICMP数据部分。* 下面详细介绍每个部分的结构、字段的作用以及如何解析它们。* * ICMP头部结构:*…

七星棋牌 6 端 200 子游戏全开源修复版源码(乐豆 + 防沉迷 + 比赛场 + 控制)

七星棋牌源码 是一款运营级的棋牌产品,覆盖 湖南、湖北、山西、江苏、贵州 等 6 大省区,支持 安卓、iOS 双端,并且 全开源。这个版本是 修复优化后的二开版本,新增了 乐豆系统、比赛场模式、防沉迷机制、AI 智能控制 等功能&#…

避坑!用Docker搞定PHP开发环境搭建(Mac、Docker、Nginx、PHP-FPM、XDebug、PHPStorm、VSCode)

本次更新主要是对环境版本进行了更新,例如php 7.3.7升级到了7.3.8,另外之前的版本有同学踩了坑,主要是官方docker镜像php:7.3.7-fpm和php:7.3.8-fpm使用了不同版本的debian,后面会提到,请各位同学留意。 因为最近换电脑…

【卫星语音通信】神经网络语音编解码算法:AudioDec

引言:低码率时代的语音革命 在偏远山区的蜂窝基站与卫星电话之间,在远洋货轮的应急通信频道里,清晰流畅的语音传输往往关乎生命财产安全。传统蜂窝通信(如4G VoLTE)和卫星通信系统(如海事卫星电话&#xf…

大数据学习(53)-Hive与Impala

&&大数据学习&& 🔥系列专栏: 👑哲学语录: 承认自己的无知,乃是开启智慧的大门 💖如果觉得博主的文章还不错的话,请点赞👍收藏⭐️留言📝支持一下博主哦&#x1f91…

【基于Raft的KV共识算法】-序:Raft概述

本文目录 1.为什么会有Raft?CAP理论 2.Raft基本原理流程为什么要以日志作为中间载体? 3.实现思路任期领导选举日志同步 1.为什么会有Raft? 简单来说就是数据会随着业务和时间的增长,单机不能存的下,这个时候需要以某种…

Redis---LRU原理与算法实现

文章目录 LRU概念理解LRU原理基于HashMap和双向链表实现LRURedis中的LRU的实现LRU时钟淘汰策略近似LRU的实现LRU算法的优化 Redis LRU的核心代码逻辑Redis LRU的核心代码逻辑Redis LRU的配置参数Redis LRU的优缺点Redis LRU的优缺点 LRU概念理解 LRU(Least Recentl…

【Java-黑马程序员】2024IDEA下载安装[ IntelliJ IDEA]

IDEA概述 IntelliJ IDEA – 用于 Pro Java 和 Kotlin 开发的 IDEhttps://www.jetbrains.com/idea/安装:傻瓜式安装,建议修改安装路径。 选择版本 Ultimate:功能全面,适合企业开发,需付费。 Community:免费,适合个人和小型项目。 选择适合你操作系统的版本 Windows版…

centos 下dockers部署surveyking-docker开源考试系统

下载初始化脚本,并自动部署至当前文件夹 https://raw.githubusercontent.com/xianyu-one/surveyking-docker/main/setup.sh -O setup.sh chmod x setup.sh bash setup.sh 手工部署 1:先卸载这些旧版本,以及关联的依赖项sudo yum remove docker docker-…

[3/11]C#性能优化-实现 IDisposable 接口-每个细节都有示例代码

[3]C#性能优化-实现 IDisposable 接口-每个细节都有示例代码 前言 在C#开发中,性能优化是提升系统响应速度和资源利用率的关键环节。 当然,同样是所有程序的关键环节。 通过遵循下述建议,可以有效地减少不必要的对象创建,从而减…