数据库基础问答(一) —— 为什么B+树更适合做文件索引和数据库索引

计算机保研夏令营备战指南:山大与西电CS考核策略深度解析 计算机保研夏令营是计算机科学与技术专业学生升学深造的重要途径,其本质是对学生专业基础、工程能力和科研潜力的综合评估。从技术原理上看,扎实的数据结构、算法、操作系统、计算机网络等核心课程知识是应对考核的基石,例如B树与B+树的区别、TCP/IP协议栈、进程线程模型等基础概念常被深入考察。在工程实践层面,编程能力(如LeetCode算法题)、项目经验(如Web后端开发、数据库优化)和系统设计思维(如高并发架构)成为区分候选人的关键。这些能力的价值在于,它们不仅是面试通关的保障,更是未来从事计算机研发工作的核心素 阅读详情

其实现有两个背景:

1. B+树本质是棵平衡m叉树,而平衡树就是解决一般多叉树失衡导致性能退化为线性的问题而生的,除了B+树,还有很多平衡树,AVL,红黑树,B树等等。

2. ,现实应用中,大多数的文件系统索引和数据库索引都是用B+树实现的,那么为什么选择了B+树作为其实现呢?

参考资料:sql优化(面试必问一)

这个是有实际证据的,如MySQL中,采用B+树成功限制了,树高,参见:

为什么 MySQL 的索引要使用 B+ 树,而不是其它树?比如 B 树?

经作者实测,高度为3的B+树存了600w+的数据,理论上可以存2000w+。原因上面包括这个链接也提到:

  • InnoDB存储引擎的最小存储单元是页,页可以用于存放数据也可以用于存放键值+指针,在B+树中叶子节点存放数据,非叶子节点存放键值+指针;

  • 索引组织表通过非叶子节点的二分查找法以及指针确定数据在哪个页中,进而在去数据页中查找到需要的数据。

每页大小固定——16K,对于非叶子节点空间可以用于存“key+孩子指针”,由于不含数据(B+树非叶子节点没有数据),所以一页可以存很多项“key+孩子指针”,这意味着最后一层的叶子节点数目 = m^(height - 1)。

叶子节点的空间就用来存数据。

 

面试数据库篇(mysql)- 04了解过索引吗?(什么是索引) 索引(index)是帮助MySQL高效获取数据的数据结构(有序)。在数据之外,数据库系统还维护着满足特定查找算法的数据结构(B+树),这些数据结构以某种方式引用(指向)数据, 这样就可以在这些数据结构上实现高级查找算法,这种数据结构就是索引。B-Tree,B树是一种多叉路衡查找树,相对于二叉树,B树每个节点可以有多个分支,即多叉。以一颗最大度数(max-degree)为5(5阶)的b-tree为例,那这个B树每个节点最多存储4个key。 阅读详情

相关推荐

深入Android构建系统:一次修改ro.vendor.build.fingerprint失败的排查与解决记录

本文深入探讨了Android构建系统中修改ro.vendor.build.fingerprint的完整解决方案。通过分析vendor分区的特殊地位和构建指纹的生成路径,提供了三种实战修改方法,并揭示了指纹修改可能遇到的陷阱与对策,帮助开发者彻底解决这一常见问题。

weixin_30621711的博客 141

B+树比B树更适合做文件数据库索引

B树: B+树: B*树是B+树的变体,在B+树的非根和非叶子结点再增加指向兄弟的指针; B树和B+树在结构上的区别 1. B树中关键字集合分布在整棵树中,叶节点中不包含任何关键字信息,而B+树关键字集合分布在叶子结点中,非叶节点只是叶子结点中关键字的索引; 2. B树中任何一个关键字只出现在一个结点中,而B+树中的关键字必须出现在叶节点中,也可能在非叶结点中重复出现; *...

ldw662523的博客 2502

DBeaver连接IoTDB避坑指南:手动配置JDBC驱动的完整流程(附问题排查)

本文提供了在DBeaver中手动配置Apache IoTDB JDBC驱动的完整流程与避坑指南。详细解析了从驱动创建、库文件添加(关键是指向整个lib目录)到连接测试的每一步,并重点针对常见的ClassNotFoundException、连接拒绝等错误提供了深度排查方案,帮助用户高效建立图形化管理连接。

weixin_28327051的博客 394

Mysql二:深入理解mysql索引原理

一、索引的产生 INNODB插入时会根据主键排序,而MyISAM是根据你插入的顺序来排序的; CREATE TABLE t1( a int PRIMARY KEY, b INT, c INT, d INT, e VARCHAR(20) ) ENGINE = INNODB; INSERT into t1 VALUES(4,3,1,1,'d'); INSERT into t1 VALUES(1,1,...

严老板的技术梦想博客 3万+

Blender点云渲染实战:用Geometry Nodes快速搞定论文配图(附Cycles渲染技巧)

本文详细介绍了如何利用Blender的Geometry Nodes系统,高效地将三维点云数据转化为高质量的科研论文配图。通过实战步骤,从数据导入、节点化几何处理、材质赋予到Cycles渲染引擎的优化设置,手把手教你制作出专业、美观的可视化图像,助力科研成果展示。

hp777的博客 265

嵌入式音频架构 - AudioWeaver 整体概念

AudioWeaver 是DSP Concept公司推出的基于嵌入式平台的音频框架。由AWE Core embedded processing engine 和 Audio Weaver Designer IDE 组成。 Audio Weaver Designer 有三个版本,ST Edition, Standard Edtion 和 Pro Edtion。 Audio Weaver Designer界面: Audio Weaver 的整体使用架构: AWD算法流文件,AWS配置脚本文件,AWB嵌入式b

甲客实验室 6874

什么是索引,索引的优缺点

数据库索引,是数据库管理系统中一个排序的数据结构,以协助快速查询、更新数据库表中数据。时间方面:创建索引和维护索引要耗费时间,具体地,当对表中的数据进行增加、删除和修改的时候,索引也要动态的维护,会降低增/改/删的执行效率;索引是一个文件,它是要占据物理空间的。索引是一种特殊的文件(InnoDB数据表上的索引是表空间的一个组成部分),它们包含着对数据表里所有记录的引用指针。通过使用索引,可以在查询的过程中,使用优化隐藏器,提高系统的性能。可以大大加快数据的检索速度,这也是创建索引的最主要的原因。

weixin_67649319的博客 1095

springboot + netty 实现多客户端登录 超出设备 并下线

本文档旨在详细描述多平台登录控制的需求和实现方案。当前系统仅支持单设备登录,需扩展为支持多设备同时在线,并提供多种登录策略。文档详细列出四种策略:单平台登录、双平台登录、三平台登录和多平台同时在线,每种策略的具体限制和支持平台。技术实现方案包括数据结构设计、NettyUtils 工具类方法、WebSocketHandler 修改,以及相应的测试方案

Likefr 1877

B+树比B树更适合做文件索引的原因

B+树比B树更适合做文件索引的原因

mine_song的博客 2万+

基于Qwen3-14B大模型的智能UI自动化测试实践

UI自动化测试是软件工程中保障产品质量的关键环节,其核心原理是通过脚本模拟用户操作,对软件界面进行功能验证。传统方法依赖于编写和维护基于元素定位的固定规则脚本,在面对复杂交互或频繁变化的界面时,维护成本高昂。大语言模型(LLM)的出现为这一领域带来了新的技术价值,其强大的自然语言理解和代码生成能力,使得测试脚本的编写从精确编码转向了任务描述。通过将大模型作为决策大脑,结合Playwright等自动化工具作为执行器,可以构建出能够理解界面、规划操作并验证结果的智能测试系统。这种方案特别适用于处理变化频繁、逻辑

weixin_42619742的博客 303

Linux之SUSE系统SAP-HANA经常系统内存不足使得SAP应用不能使用解决方案

问题描述 Linux内存使用量超过阈值,使得sap应用程序无可用内存,最终导致程序崩溃。 问题原因 自己查阅了一些资料,也基于zabbix的可用内存和实际不太一样入手去找原因发现问题出现于Cached的值过大,导致系统没有可以再分配的内存空间。Cached只要用来缓存文件的,经常读写的文件会被缓存到Cached中,可以增加读写效率,该功能是Linux系统内核提供的,而SAP-HANA的日志文件很大...

liuxiangyang_的博客 6710

数据库进阶(文件的组织方式和索引)

数据库中文件的组织方式数据库的组织要考率更新和检索的需求,更新涉及到数据的存储空间的扩展和回收的问题,检索涉及到扫描整个数据库,和大批量处理数据的问题,不同的需求要求不同的数据组织方式和存取方式。数据的组织方法是指数据组成记录,块,和访问结构的方式,包括把记录和块存储在磁盘上的方式,以及块和记录之间的相互联系。 存取方法是指对文件所采取的存取操作方法。 一种文件组织可以采取多种存取方法进行访问无

各种西瓜的博客 1万+

015、PCIE带宽计算:理论vs实际——调试手记

最近在调一块图像采集卡,主控抱怨数据吞吐量上不去。规格书上写着PCIE 3.0 x4,理论带宽接近4GB/s,实际测试却卡在2.5GB/s左右。硬件同事拍胸脯说链路训练正常,软件同事咬定DMA配置没问题——这种场景是不是很熟悉?

z534437748的博客 880

B树和B+树总结

B树:适合一般的动态数据集的存储和检索,插入和删除操作相对均衡。B+树:由于其叶子节点的顺序链表结构,更适合频繁的范围查询和顺序访问。这两种树结构在实际应用中都很重要,选择使用哪一种通常取决于具体的需求。

m0_52796585的博客 1605

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

大厂面试问答题汇总分析---数据库(索引-聚集/非聚集,事务,mySql, 锁)

概述摘要: 1、【数据库】相关题目在历届大厂面试中占比20%到30%之间 【根据600多道大厂面试题】,有的公司该类题目占比比例会更高。本文梳理就是针对高频题目和相关知识点的梳理学习,包含高频问题和相关所有答案。 2、其中包含 MySql, SqlServer, SQL,以及Redis(本质是内存数据库,但redis知识点太多,专门一篇文章梳理)等。 面试题目考察频次列表(仅以本次大厂面经提供题目,进行归纳分析,作为样本) 【超高频】 考察次数 > 5 【高频】 5 >=

尕白白的专栏 1643

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

【mysql存储引擎为什么选择B+树】

本文系统介绍了数据库索引使用的树结构演进过程,重点分析了MySQL采用B+树索引的原因。从二叉搜索树(BST)开始,逐步讲解了AVL树、红黑树、B树到B+树的发展历程,通过图解对比了各树结构的优缺点。特别指出:二叉类树因节点少导致树高IO多,而B+树通过多路平衡、数据仅存叶子节点、叶子链表连接等设计,完美解决了磁盘IO高和范围查询效率问题。最后对比了InnoDB和MyISAM引擎的索引实现,证明B+树是最适合数据库的索引结构,具有IO最少、范围查询快、适合海量数据等核心优势。

alan0721的博客 591

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

B树:从磁盘I/O到数据库索引的核心数据结构

B树的全称是多路平衡搜索树,我们日常讨论的B树,均指m阶B树(m代表单个节点允许的最大子节点数量),它拥有严格的数学约束,也是保证检索高效、结构稳定的核心。⭐B树整体结构示意图节点容量上限每个节点最多拥有m个子节点,对应最多存储m-1个关键字(key),避免节点过大导致内存检索耗时增加。非根非叶节点容量下限除根节点、叶子节点外,所有内部节点至少拥有⌈m/2⌉个子节点对应至少⌈m/2⌉-1个关键字,保证节点填充率,避免树结构过于松散。根节点特殊规则。

枕星而眠的博客 796

MySQL问答200

本文涵盖MySQL全栈面试核心内容,包括:基础概念(关系型数据库特性、体系结构);存储引擎对比(InnoDB/MyISAM);索引原B+树、聚簇索引)与优化策略;事务ACID与隔离级别实现;锁机制(行锁、间隙锁)与MVCC原理;日志系统(redo/undo/binlog);SQL优化与执行计划分析;高可用方案(主从复制、分库分表);InnoDB底层机制(Buffer Pool、Checkpoint);以及MySQL 8.0新特性。

weixin_72753562的博客 827

mysql知识点问题详解

mysql知识点及锁机制问题详解mysql设计表三大范式原子性主键策略非主依赖三级目录 mysql设计表三大范式 原子性 主键策略 非主依赖 三级目录

weixin_56702673的博客 783

Java面试7天突击指南:从基础到Spring的高频考点与实战策略

在Java技术面试中,掌握核心知识体系与高频考点是成功的关键。理解Java虚拟机(JVM)内存模型、垃圾回收机制以及并发编程中的锁与线程池原理,是构建稳定、高性能应用的基础。这些底层知识不仅体现了开发者的技术深度,也直接关系到系统在高并发场景下的表现与问题排查能力。结合MySQL索引优化与Spring框架的IoC、AOP等核心思想,能够有效提升应用的数据处理效率与架构灵活性。本文聚焦Java面试中最常被考察的HashMap实现、线程池参数、JVM内存区域、索引失效场景等核心“母题”,通过结构化记忆与场景化应

weixin_30315435的博客 570

Java面试高效突击:从原理到场景的实战解题框架

在软件开发领域,面试是评估开发者技术深度与解决问题能力的关键环节。其核心原理在于考察候选人是否具备将离散知识点关联成体系化知识网络,并应用于实际工程场景的能力。这种能力的技术价值在于,它能直接反映开发者面对复杂系统时的分析、设计与调试水平,是区分普通编码者与高级工程师的重要标尺。典型的应用场景包括系统性能调优、高并发设计、线上故障排查以及分布式架构决策。本文聚焦于Java技术栈,深入剖析如何将Java基础、并发编程、JVM、MySQL及Spring等核心模块的知识点,通过建立诸如从HashMap原理到Con

weixin_30562507的博客 349

epoll最详细的介绍以及与epoll相关的问答题

在现实中,我们当然选择第一种方式,但是在计算机中,情况就要复杂一些。1)对一个fd调用EPOLL_ADD,如果这个fd上有用户关注的激活事件,则这个fd会被添加到readylist. 2)对一个fd调用EPOLL_MOD改变关注的事件,如果新增加了一个关注事件且对应的fd上有相应的事件激活,则这个fd会被添加到readylist. 3)当一个fd上有事件触发时(例如一个socket上有外来的数据)会调用ep_poll_callback(见eventpoll::ep_ptable_queue_proc),

m0_71124168的博客 1472

TiDB 性能优化面试题:索引、缓存、异步与并发问题解析

先跑通,再优化:先让代码工作,再根据性能测试数据做针对性优化了解底层原理:知道框架帮你做了什么,才知道什么时候需要绕过它从错误中学习:每次线上问题都是提升的机会,认真做 RCA(根因分析)保持代码可测试:依赖注入、单一职责,让每个函数都能独立测试关注社区动态:订阅官方博客/Release Notes,及时了解新特性和 Breaking Changes💬觉得有帮助?持续更新 TiDB 实战系列。💬标签:TiDB | 性能优化 | 面试 | 索引 | 并发。

斌味代码的博客 510

Java面试突击:从知识点串联到场景化实战的10天高效攻略

在软件开发领域,数据结构与算法、系统设计、性能优化是构建高效稳定应用的核心基础。理解这些基础概念及其实现原理,例如HashMap的底层数据结构与扩容机制、ConcurrentHashMap的线程安全实现,对于提升代码质量和系统性能具有关键价值。这些技术广泛应用于高并发、大数据处理等场景,是后端工程师解决实际问题的必备工具箱。本文聚焦Java核心技术栈,通过构建“回答逻辑链”和“场景化记忆”的方法,将散落的知识点如JVM内存模型、MySQL索引与事务、Spring框架原理等进行有效串联,旨在帮助学习者在短时间

cihongmo6452的博客 365

Java最高频八股文速通

final 类:String 类被声明为 final,这意味着它不能被继承,从而防止了通过继承改变其行为。final 字段:String 类中的 value 字段是 final 的,这保证了 String 对象在创建后其内部字符数组不会被改变。没有提供修改方法:String 类没有提供任何可以修改其内容的方法。所有对 String 的操作(如拼接、替换等)都会生成一个新的String 对象。

qq_43751506的博客 6395

Java面试突击:结构化突击与降维打击,7天构建高效知识体系

在Java技术领域,构建一个清晰、可执行的知识体系是应对中高级岗位面试的关键。其核心原理在于将散点化的技术知识点(如JVM、并发编程、MySQL索引)通过场景化思维进行结构化串联,形成从概念理解到实战应用的完整闭环。这种结构化学习方法的技术价值在于,它能将庞大的知识体系压缩成高效的突击路径,帮助开发者从被动记忆转向主动构建解题框架。在实际应用场景中,例如设计一个高并发的秒杀系统,就需要将Redis的原子操作、消息队列的削峰填谷、线程池的参数优化等核心层知识,与系统分层设计、限流降级等场景层思维有机结合。通过

weixin_33991418的博客 332
上一篇: ON、WHERE、USING和HAVING的区别
下一篇: 数据库基础问答(二) —— 为什么like不会像范围查询那样使索引失效
ProLayman
博客等级 码龄10年 105粉丝 192原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值