Mysql索引(四)
1、B树:B树即平衡查找树,一般理解为平衡多路查找树,也称为B-树、B_树。是一种自平衡树状数据结构,能对存储的数据进行O(log n)的时间复杂度进行查找、插入和删除;
1)每个节点占用一个盘块的磁盘空间;
2)一个节点上有n个升序排序的关键字和n+1个指向子树根节点的指针p,指针存储的是子节点所在的磁盘块的地址。以上图为例:每个节点有2个关键字,指向3棵子树。从根节点开始,关键字为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
问题:
1)B树的每个节点都有data域,这无疑增大了节点大小;
2)因为磁盘IO一次读出的数据量大小是一个固定值,如果你的data数据和我的关键字一起的话,那一个节点所能存的关键字就少了;
3)所以每次读取的就少,IO次数就要增多,其中,磁盘的IO耗时是远大于在内存中的任何操作;
2、B+树:B+树在B树的基础上做了进一步的优化,使其更加适合实现外存索引结构。上面的B树的每个节点不仅包含数据的索引值,也包含了数据的data值,B+树在此基础上只包含了索引
1)每一个节点就是每一页数据,而B+树只包含索引值,这就意味着B+树可以存更多的索引;
2)所有数据记录节点都是按照键值大小顺序存放在同一层的叶子节点上,而非叶子节点上只存储索引值信息,这样可以大大加大每个节点存储的索引值数量,降低B+树的高度
InnoDB的底层数据结构就是B+树,其中主页节点是常驻内存的,检索的方式同B树,但是载入内存的大小就减少了很多,对比B树,它的优点如下:
1) 非叶子节点data,只存储索引,可以放更多的索引
2) 所有叶子节点之间都有一个链指针(顺序访问指针,可以提高访问的性能),比如检索大于36的数据,通过索引找到36所在的位置之后,然后直接读取指针就可以拿到全部数据
3) 数据记录都存放在叶子节点中(磁盘)中,只有找到之后才加载到内存中
InnoDB存储引擎页的默认大小是16KB,一般表的主键类型是int,也就是4bytes或者bigint 8bytes,按照bigint来计算,指针类型也一般为6bytes,也就是说根节点一个页中大概存储16KB/(8B+6B)=1170个键值,假设叶子节点的一个页(主要存data的节点)的数据大小为1kb,那么大概就可以存16kb/1kb = 16条数据。也就是说,如果B+树的索引高度为3,那么可以维护的记录数量为1170 * 1170 * 16 = 21902400条数据,当数据量超过2000w条的时候,mysql的性能会急剧下降。实际情况中每个节点可能不能填充满,因此在数据库中,B+Tree的高度一般都在2 ~ 4层。MySQL的InnoDB存储引擎在设计时是将根节点常驻内存的,也就是说查找某一键值的行记录时最多只需要1~3次磁盘I/O操作
B+树的索引是存在父子节点冗余的,就是因为这些冗余索引,索引就可以提高了数据检索的速度。就算是全表扫描也是直接走的叶节点之间的指针
相关文章:
Mysql索引(四)
1、B树:B树即平衡查找树,一般理解为平衡多路查找树,也称为B-树、B_树。是一种自平衡树状数据结构,能对存储的数据进行O(log n)的时间复杂度进行查找、插入和删除; 1)每个节点占用一个盘块的磁盘空间&#x…...
力扣——【1991. 找到数组的中间位置】
#前缀和思想 主要利用递推的思想,将数列的前n!项和存到一个新数列中,递推公式可能需要自己推导 一个数列的值等于另一个数列的第i个元素加上这一个数列的第i-1个元素 同时需要初始化这个数列的第一个元素另一个数列的第一个元素 #思路 本…...
在 Linux 系统(ubuntu/kylin)上安装 Docker
在 Linux 系统上安装 Docker 的步骤如下(以 Ubuntu/Debian 和 CentOS/RHEL 为例): 请用./check-config config检查内核是否支持,necessarily 必须全部enable。 以下是脚本自行复制运行: #!/usr/bin/env sh set -eEXITCODE=0# bits of this were adapted from lxc-checkco…...
【实证分析】数智化转型对制造企业全要素生产率的影响及机制探究(1999-2023年)
数智化转型是实现数字经济与实体经济深度融合,推动制造企业高质量可持续发展的必然选择,也是加快新质生产力发展的重要抓手。参照宋冬林(2025)的做法,对来自科技进步与对策《数智化转型对制造企业全要素生产率的影响及机制探究——基于中国制…...
lower_bound
在C中,lower_bound 返回的是一个迭代器(iterator),而不是直接的下标位置。因此,为了得到数组中的索引(即 pos1),你需要用返回的迭代器减去数组的起始地址(num)…...
biblatex 的 Biber 警告:tex文件运行无法生成参考文献和目录
原因:使用了 biblatex 管理参考文献,但未运行 biber 生成参考文献数据。 解决:更新 LaTeX Workshop 配置 修改你的 settings.json,添加 biber 工具并更新编译流程: {"latex-workshop.latex.tools&…...
解锁 MCP:模型上下文协议的介绍与应用,技术解析与应用场景
欢迎来到涛涛聊AI,这几天MCP很火,咱们一起学习下吧。 一、什么是 MCP MCP,即 Model Context Protocol(模型上下文协议),是由 Anthropic 推出的一个具有创新性的开放协议 。它的核心目标是统一 LLM 应用与外部数据源和工具之间的通信方式,为 AI 开发打造标准化的上下文…...
十二种存储器综合对比——《器件手册--存储器》
存储器 名称 特点 用途 EEPROM 可电擦除可编程只读存储器,支持按字节擦除和写入操作,具有非易失性,断电后数据不丢失。 常用于存储少量需要频繁更新的数据,如设备配置参数、用户设置等。 NOR FLASH 支持按字节随机访问&…...
对重大保险风险测试的算法理解
今天与同事聊到重大保险风险测试,借助下面链接的文章, 谈IFRS 17下的重大保险风险测试 - 知乎 谈一下对下图这个公式的理解。 尤其是当看到下面这段文字的解释时,感觉有些算法上的东西,需要再澄清一些。 首先,上面文…...
App Cleaner Pro for Mac 中 Mac软件卸载工具
App Cleaner Pro for Mac 中 Mac软件卸载工具 一、介绍 App Cleaner & Uninstaller Pro Mac破解,是一款Mac软件卸载工具,残余垃圾清除工具!可以卸载应用程序或只删除不需要的服务文件,甚至可以删除以前删除的应用程序中的文…...
【操作系统】线程同步:原理、方法与实践
一、线程同步的核心概念 1.1 为什么需要线程同步? 在多线程环境中,当多个线程并发访问共享资源(如内存、文件、数据库等)时,可能会引发数据竞争(Race Condition),导致数据不一致或…...
vue实现二维码生成器和解码器
vue实现二维码生成器和解码器 1.生成基本二维码:根据输入的value生成二维码。 2.可定制尺寸:通过size调整大小。 3.颜色和背景色:设置二维码颜色和背景。 4.静区(quiet zone)支持:通过quietZone调整周围的…...
p2p的发展
PCDN(P2P内容分发网络)行业目前处于快速发展阶段,面临机遇与挑战并存的局面。 一、发展机遇 技术融合推动 边缘计算与5G普及:5G的高带宽、低延迟特性与边缘计算技术结合,显著提升PCDN性能,降低延迟&#x…...
DeepSeek提示词实战大全:提示词合集和使用技巧
大家好,我是大 F,深耕AI算法十余年,互联网大厂技术岗。 知行合一,不写水文,喜欢可关注,分享AI算法干货、技术心得。 更多文章可关注《大模型理论和实战》、《DeepSeek技术解析和实战》,一起探索技术的无限可能! 【数据集篇】更多阅读: 大语言模型常见任务及评测数据集…...
23种设计模式生活化场景,帮助理解
以下是 23种设计模式的生活化场景 及其核心对比,通过日常例子和比喻帮助理解它们的本质区别和应用场景: 创建型模式(5种) 1. 工厂方法(Factory Method) • 场景:快餐店的点餐系统。 • 问题&a…...
Kotlin 学习-方法和参数类型
/*** kotlin 的方法有三种* */fun main() {/*** 方法一* 1.普通类的成员方法申明与调用* (1)需要先构建出实例对象,才能访问成员方法* (2)实例对象的构建只需要在类名后面加上()* */Person().test()/*** 方法二&#x…...
Java 解析日期格式各个字段含义温习
背景 今天解析了一个不常见的日期格式 「10-Mar-2025 16:30:47.869」,对应的 Java 日期格式是 dd-MMM-yyyy HH:mm:ss.SSS ,而且跟 Local 语言环境有关。 本文记录这个简单的解析过程,顺便回忆一下日期格式各个字段。毕竟平时只用了常见的 y…...
OpenBayes 一周速览|1分钟生成完整音乐,DiffRhythm人声伴奏一键搞定; Stable Virtual Camera重塑3D视频创作
公共资源速递 5 个数据集: * 302 例罕见病病例数据集 * DRfold2 RNA 结构测试数据集 * NaturalReasoning 自然推理数据集 * VenusMutHub 蛋白质突变小样本数据集 * Bird Vs Drone 鸟类与无人机图像分类数据集 2 个模型: * Qwen2.5-0mni * Llama…...
SpringBoot 数据库MySql的读写分离 多数据源 Shardingsphere高并发优化
介绍 传统的 MySQL 架构中,所有的数据库操作(包括读操作和写操作)都在同一个数据库实例上进行。随着应用程序的规模增长,单一数据库实例可能会成为瓶颈,无法满足高并发的需求。为了优化性能,可以将数据库的…...
SQLI漏洞公开报告分析
文章目录 1. 闭合 )2. 邀请码|POST参数|时间盲注 | **PostgreSQL**3. POST|order by参数|布尔盲注|Oracle4. SOAP请求|MSSQL|布尔盲注5. MySQL 时间盲注漏洞6. GET|普通回显注入7. ImpressCMS 1.4.2 | CVE | POST | 布尔盲注8. Mysql | post | 布尔/时间盲注9. 登录口 | post |…...
并行和并发有什么区别?
1. 定义 并行是在同一时刻执行多个任务。并发是在相同的时间段内执行多个任务,任务可能交替执行,通过调度实现。 2. 区别 执行方式: 并发:多个任务交替进行,任务并不一定同时执行,只是在同一时间段内处理…...
Elasticsearch 全面解析
Elasticsearch 全面解析 前言一、简介核心特性应用场景 二、核心原理与架构设计1. 倒排索引(Inverted Index)2. 分片与副本机制(Sharding & Replication)3. 节点角色与集群管理 三、核心特点1. 灵活的查询语言(Que…...
SQL 中的 NULL 处理
NULL 在 SQL 中表示缺失、未知或不适用的数据值,它与空字符串或零值不同。SQL 对 NULL 有特殊的处理规则: NULL 的基本特性 比较运算:任何与 NULL 的比较都返回 UNKNOWN(既不是 TRUE 也不是 FALSE) SELECT * FROM tab…...
2025常用的ETL 产品推荐:助力企业激活数据价值
在当今数字化时代,企业面临着海量数据的挑战与机遇,ETL(Extract, Transform, Load)工具作为数据整合与分析的关键环节,其重要性日益凸显。ETL 厂商众多,各有优势,本文将从多个维度进行分析&…...
深入解析:Python 爬取淘宝商品券后价
在电商领域,淘宝作为国内领先的电商平台,拥有海量的商品和丰富的优惠活动。对于技术开发者来说,获取淘宝商品的券后价是实现电商应用功能的重要环节。本文将详细介绍如何通过淘宝开放平台的 API 接口获取商品的券后价,并提供实际的…...
25.4.10学习总结
关于消除警告 警告: Loading FXML document with JavaFX API of version 23.0.1 by JavaFX runtime of version 17.0.6 对应这条警告,我的处理方式是,将IDEA的默认javaFX的库换成自己下载的javaFX的库。 我用的javaFX的库如下: javaFX-24…...
【XML基础-2】深入理解XML中的语义约束:DTD详解
XML(可扩展标记语言)作为数据交换的标准格式,在Web服务和应用程序间数据传递中扮演着重要角色。而确保XML文档结构正确性和语义一致性的关键,就在于文档类型定义(DTD)。本文将全面解析DTD的概念、语法结构、…...
SkyWalking + ELK 全链路监控系统整合指南
一、架构设计图 二、核心组件部署 1. SkyWalking 集群部署 yaml: # docker-compose-skywalking.yml version: 3.8services:oap:image: apache/skywalking-oap-server:9.7.0ports:- "11800:11800" # gRPC- "12800:12800" # HTTPenvironment:SW_STORAGE: …...
LeetCode hot 100—编辑距离
题目 给你两个单词 word1 和 word2, 请返回将 word1 转换成 word2 所使用的最少操作数 。 你可以对一个单词进行如下三种操作: 插入一个字符删除一个字符替换一个字符 示例 示例 1: 输入:word1 "horse", word2 &q…...
SAP系统年终结算出错
问题描述:2024年采购订单发票校验过账到2024年时提示错误如下: 问题原因:2024年全部未结束的采购申请和订单被结转到2025年。 解决方法:用事务代码FMJ3冲销此采购订单结转。...
在 Dev-C++中编译运行GUI 程序介绍(二)示例:祝福程序
在 Dev-C中编译运行GUI 程序介绍(二)示例:祝福程序 前期见: 在 Dev-C中编译运行GUI 程序介绍(一)基础 https://blog.csdn.net/cnds123/article/details/147019078 示例1、祝福程序 本文中的这个祝福程序是…...
Uniapp使用onShow语法报before initialization
一、错误原因分析 函数未完成初始化时被调用 • 当你在 onShow 生命周期中调用 getUserMessagePlan() 时,如果该函数的定义位于调用代码的下方(如示例中的顺序),JavaScript 引擎会因 变量提升规则 抛出此错误。 • 示例代码结构&a…...
大模型在儿童急性淋巴细胞白血病(ALL)-初治患者诊疗中应用的研究报告
目录 一、绪论 1.1 研究背景与意义 1.2 国内外研究现状 1.3 研究目的与内容 二、大模型技术与儿童 ALL 相关知识 2.1 大模型技术原理与特点 2.2 儿童 ALL 的病理生理与诊疗现状 三、术前风险预测与手术方案制定 3.1 术前数据收集与预处理 3.2 大模型预测术前风险 3.…...
如何选择适合机床的丝杆支撑座型号?
在机床中选择丝杆支撑座型号时,需综合考虑机械性能、安装条件及应用需求,接下来我们一起来看看详细的选型指南! 1、适配性:丝杆支撑座应与所使用的滚珠丝杆完全适配,确保两者在尺寸、规格、性能等方面相互匹配。 2…...
「The Road to Web3 Cloud」香港活动回顾|波卡的 Web3 Cloud 愿景
在区块链基础设施的发展浪潮中,Polkadot 正在迈出决定性的一步:打造一个属于 Web3 的 “云服务平台”。如果说 Bitcoin 创造了一个计算器,以太坊创造了一个计算机,那么 Polkadot 正在做的则是构建链上的 “云服务器”。它的目标是…...
PostgreSQL-容器运行时索引修复
在 Docker 中运行的 PostgreSQL 数据库如果索引损坏,可以通过以下步骤进行修复。索引损坏可能会导致查询性能下降或数据不一致,因此需要及时处理。 1. 进入 PostgreSQL 容器 首先,进入运行 PostgreSQL 的 Docker 容器: <BASH&…...
Vanna + qwq32b 实现 text2SQL
Vanna 是一个开源的 Text-2-SQL 框架,主要用于通过自然语言生成 SQL 查询,它基于 RAG(Retrieval-Augmented Generation,检索增强生成)技术。Vanna 的核心功能是通过训练一个模型(基于数据库的元数据和用户提…...
100V5A同步降压大功率芯片WD5105:高效电源管理的卓越之选
100V5A同步降压大功率芯片WD5105:高效电源管理的卓越之选 在现代电子设备的复杂电源架构中,对高效、稳定且可靠的电源管理芯片需求日益增长。WD5105作为一款100V5A同步降压大功率芯片,凭借其出色的性能、全面的保护机制以及广泛的应用适应性…...
springboot中测试python脚本:ProcessBuilder
目录 一.添加Jython依赖 二.使用步骤 1. 创建 ProcessBuilder 实例 2. 设置工作目录(可选) 3. 合并错误流(可选) 4. 启动进程 5. 处理输入输出流 6. 等待进程完成 7.完整案例 三.注意事项 ProcessBuilder是jdk提供的脚本…...
Google Chrome下载受限制的解决方案【方法指南】
在国内使用网络时,部分用户在尝试访问Google Chrome官网下载谷歌浏览器时,常常遇到网页无法打开或文件下载失败的情况。这种下载受限制的问题多由网络访问政策或DNS解析异常导致。为了正常获取Google Chrome的最新版安装程序,用户需要通过一些…...
mysql-锁的算法(记录锁、间隙锁、临键锁)
1.行锁的三种算法 有3种行锁算法,分别是: Record Lock:单个行记录上的锁,没有主键,会使用隐式的主键进行锁定Gap Lock:间隙锁,锁定一个范围,但不包含记录本身Next-Key Lock&#x…...
SAP Business One系统标准功能之外的不允许负库存控制
SqlServer版本写法: --在存储过程SBO_SP_TransactionNotification里加上这段代码,记得定义一个全局变量用于接收提醒具体是哪个物料 IF transaction_type IN (A) BEGINIF EXISTS (SELECT 1 FROM OIVL T0INNER JOIN OITW T1 ON T0.ItemCode T1.ItemCode…...
AI与5G的融合:如何实现更快速、更智能的物联网应用?
引言 AI和5G的结合,正在加速物联网(IoT)应用的发展,让万物互联变得更加智能、高效。5G提供超高速率、低时延和海量连接的网络能力,而AI则赋予物联网设备更强的数据分析、预测和自动决策能力。当AI与5G融合,…...
Redis的哨兵
Redis的哨兵 Sentinel 一.哨兵概念1.相关名词解释图 二.主节点恢复方式1.人工恢复主节点故障流程图2.哨兵自动恢复主节点流程 三.使用docker搭建环境1.安装docker-compose2.安装docker3.停止之前的redis服务器4.使用docker获取到redis的镜像5.使用docker-compose进行容器编排创…...
初识Redis · 简单理解Redis
目录 前言: 分布式系统 开源节流 认识Redis 负载均衡 缓存 微服务 前言: 本文只是作为Redis的一篇杂谈,简单理解一下Redis为什么要存在,以及它能做到和它不能做到的事儿,简单提及一下它对应的优势有什么&#…...
Python设计模式-抽象工厂模式
1. 什么是抽象工厂模式 抽象工厂模式(Abstract Factory Pattern)是一种创建型设计模式,它提供了一种方式来创建一系列相关或相互依赖的对象,而无需指定它们具体的类。这种模式是所有形式的工厂模式中最为抽象和最具一般性的一种。…...
【中检在线-注册安全分析报告】
前言 由于网站注册入口容易被黑客攻击,存在如下安全问题: 1. 暴力破解密码,造成用户信息泄露 2. 短信盗刷的安全问题,影响业务及导致用户投诉 3. 带来经济损失,尤其是后付费客户,风险巨大,造…...
第16届蓝桥杯单片机模拟试题Ⅲ
试题 代码 sys.h #ifndef __SYS_H__ #define __SYS_H__#include <STC15F2K60S2.H> //sys.c extern unsigned char UI; //界面标志(0湿度界面、1参数界面、2时间界面) extern unsigned char time; //时间间隔(1s~10S) extern bit ssflag; //启动/停止标志…...
软件系统安全设计方案,信息化安全建设方案(Word原件)
1.1 总体设计 1.1.1 设计原则 1.2 物理层安全 1.2.1 机房建设安全 1.2.2 电气安全特性 1.2.3 设备安全 1.2.4 介质安全措施 1.3 网络层安全 1.3.1 网络结构安全 1.3.2 划分子网络 1.3.3 异常流量管理 1.3.4 网络安全审计 1.3.5 网络访问控制 1.3.6 完…...
UE5 尝试接入 C# 脚本方案
最近团结替代 Unity6 的事官宣了,只能唏嘘不已,顺带的也就研究了一下在 UE5 中接入 C# 的方案,也算是提前帮广大 Unity 开发者蹚一下转 UE 的路~ 当前我发现的,维护比较勤快的 UE C# 方案有2个,UnrealCSharp 和 Unrea…...