还不懂什么是B+树?看完这篇包你明白

Ubuntu使用cmake出现Performing Test CMAKE_HAVE_LIBC_PTHREAD - Failed 解决 Performing Test CMAKE_HAVE_LIBC_PTHREAD - Failed 阅读详情

前言

每当我们执行某个 SQL 发现很慢时,都会下意识地反应是否加了索引,那么大家是否有想过加了索引为啥会使数据查找更快呢,索引的底层一般又是用什么结构存储的呢,相信大家看了标题已经有答案了,没错!B+树!那么它相对于一般的链表,哈希等有何不同,为何多数存储引擎都使用它呢,今天我就来揭开 B+ 树的面纱,相信看了此文,B+ 树不再神秘,对你理解以下高频面试题会大有帮助!

  • 为啥索引常用 B+ 树作为底层的数据结构
  • 除了 B+ 树索引,你还知道什么索引
  • 为啥推荐自增 id 作为主键,自建主键不行吗
  • 什么是页分裂,页合并
  • 怎么根据索引查找行记录

本文将会从以下几个方面来讲解 B+ 树

  1. 定义问题
  2. 几种常见的数据结构对比
  3. 创建索引有哪些需要考虑的问题,怎样更高效地建立索引

定义问题

要知道索引底层为啥使用 B+ 树,得看它解决了什么问题,我们可以想想,日常我们用到的比较多的 SQL 有哪些呢。

假设我们有一张以下的用户表:

CREATE TABLE `user` (
  `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `name` varchar(20) DEFAULT NULL COMMENT '姓名',
  `idcard` varchar(20) DEFAULT NULL COMMENT '身份证号码',
  `age` tinyint(10) DEFAULT NULL COMMENT '年龄',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='用户信息';

一般我们会有如下需求:

1、根据用户 id 查用户信息

select * from user where id = 123;

2、根据区间值来查找用户信息

select * from user where id > 123 and id < 234;

3、按 id 逆序排列,分页取出用户信息

select * from user where id <  1234 order by id desc limit 
CANoe信号波形分析保姆级教程:Graphic窗口从配置到实战避坑 本文详细解析了CANoe的Graphic窗口在信号波形分析中的高效配置与实战应用技巧。从信号显示模式选择、测量光标进阶操作到信号分组策略,提供工程化解决方案,帮助工程师快速定位总线信号异常,提升汽车电子开发与测试效率。 阅读详情

相关推荐

Python高级数据结构——B和B+

B和B+是一种自平衡的搜索,其每个节点可以含多个键值对。B和B+的主要区别在于节点的定义和遍历方式。B: 每个节点含键值对,并具有子节点。B的节点含的键值对数量介于t-1和2t-1之间,其中t是的最小度数。B+: 内部节点只含键值,不存储数据。所有的数据都存储在叶子节点上,形成有序链表。B+的节点含的键值对数量介于t和2t-1之间。self.t = t # 最小度数B和B+是一种多叉搜索,具有高效的插入、删除和搜索性能。

Echo_Wish 1835

什么是B+

B+ B+是B的一种变体,也属于平衡多路查找,大体结构与B相同,含根节点、内部节点和叶子节点。多用于数据库和操作系统的文件系统中,由于B+内部节点不保存数据,所以能在内存中存放更多索引,增加缓存命中率。另外因为叶子节点相连遍历操作很方便,而且数据也具有顺序性,便于区间查找。 B+特点 B+可以定义一个m值作为预定范围,即m路(阶)B+。 根节点可能是叶子节点,也可能是含两个或两个以上子节点的节点。 内部节点如果拥有k个关键字则有k+1个子节点。 非叶子节点不保存数据,只保存关键字用作

C/C++Linux、音视频、DPDK 1万+

BPlusTree:B+的python实现

B+ 在 B+ 中插入数据 要在 B+ 中插入数据,请运行: python bpt.py insert <filename> 文件名的默认参数是assgn2_bplus_data.txt 例子: python bpt.py insert assgn2_bplus_data.txt 在运行此查询时保存(插入查询是持久的)。 对应的数据存放在data/ 相应的配置存储在 .bplustree 中 查询B+ 要在 B+ 上运行查询,请运行 python query <filename> 文件名的默认参数是querysample.txt 例子: python query querysample.txt 在运行此查询时保存(插入查询是持久的)。 对应的数据存放在data/ 相应的配置存储在 .bplustree 中 删除 要删除/销毁及其所有节点,请运行

数据结构——B+

B+

weixin_52821814的博客 3万+

什么是B+

什么是B+?B+是一种数据结构。B+索引是B+数据库中的一种实现,是最常见也是数据库中使用最为频繁的一种索引。

weixin_48323589的博客 705

什么是B-

一、什么是B-Mysql数据库用过了吧? 里面的【索引】是基于什么【数据结构】? 索引主要是基于【Hash表】或者【B+】 要弄明白B+,先要了解什么是B-。 B-就是【B】,中间的横线并不是减号。 二、为什么数据库【索引】要使用【】结构存储呢...

qq_24047659的博客 8471

你管这破玩意叫 B+

索引可以说是每个工程师的必备技能点,明白索引的原理对于写出高质量的 SQL 至关重要,今天我们就从 0 到 1 来理解下索引的原理,相信大家看完不关对索引还会对 MySQL 中 InnoDB 存储引擎的最小存储单位「页」会有更深刻的认识 从实际需求出发 假设有如下用户表: CREATE TABLE `user` ( `id` int(11) unsigned NOT NULL AUTO_INCREMENT, `name` int(11) DEFAULT NULL COMMENT '姓名',

yoyo31的博客 159

结构系列(四):MongoDb 使用的到底是 B ,还是 B+

文章首发于「陈义」公众号及个人博客 shuyi.tech关于 B 与 B+ ,网上有一个比较经典的问题:为什么 MongoDb 使用 B ,而 MySQL 索引使用 B+ ?但实...

陈树义 1538

你管这破玩意叫 B+ 树?

索引可以说是每个工程师的必备技能点,明白索引的原理对于写出高质量的 SQL 至关重要,今天我们就从 0 到 1 来理解下索引的原理,相信大家看完不光对索引还会对 MySQL 中 InnoD...

weixin_44742132的博客 178

为什么MYSQL的索引系统采用B+

文章目录1.什么是索引?2.为什么需要索引?3.如何设计索引系统?4.MYSQL索引系统是什么呢?为什么不按照上面说的格式储存呢?5.哈希表6.6.1 二叉6.2 二分查找(Binary Search Tree ,BST)6.3 平衡二叉(Balanced Binary Tree, AVL)6.4 红黑6.5 B6.6 B+总结 1.什么是索引? 索引是为了加速对表中数据行的检索而创建的一种分散的存储结构。(就好像我们小时候用的字典,有了字典查到对应的字就会变快) 2.为什么需要索引? 首先

微滑低的博客 664

建议你点击进来这里学习下!还不理解B和B+

B 在介绍B+之前, 先简单的介绍一下B,这两种数据结构既有相似之处,也有他们的区别,最后,我们也会对比一下这两种数据结构的区别。 现在正值金9银10的黄金招聘期,你们都准备好了吗?本人将一些各大厂商的面试题和今年(2020)最新资料的收集,以下是部分资料截图(所有资料均已整合成文档,pdf压缩打处理)。 如有有需要的朋友可以扫描下方二维码 B概念 B也称B-,它是一颗多路平衡查找。二叉我想大家都不陌生,其实,B和后面讲到的B+也是从最简单的二叉变换而来的,并没有什么

weixin_47043124的博客 203

B+详解,一次就懂

一键读懂B+原理

qq_41076531的博客 1万+

二叉算法之B+ (B+ Tree)详细解读

B+(B+ Tree)是B的一种变体,广泛应用于数据库系统和文件系统的索引结构。与B相比,B+在结构上有一些改进,特别是在提高查询效率、范围查找性能和磁盘I/O效率等方面更具优势。

欢迎来到我的博客!这里是一个专注于计算机技术的分享平台,涵盖编程开发、算法研究、系统架构、软件工程等多个领域。无论你是初学者还是资深开发者,都能在这里找到有价值的内容。 3985

python实现B/B+

B和B+都是一种多路搜索,用于对大量数据进行排序和查找。它们在数据库系统中被广泛应用,特别是用于构建索引结构。

liulanba的博客 2365

经典结构——B+的原理及实现

文章目录B+的概念B+实现B+节点参数B+插入实现B+删除实现 B+的概念 规则: B+跟B不同B+的非叶子节点不保存关键字记录的指针,只进行数据索引,这样使得B+每个非叶子节点所能保存的关键字大大增加 B+叶子节点保存了父节点的所有关键字记录的指针,所有数据地址必须要到叶子节点才能获取到。所以每次数据查询的次数都一样 B+叶子节点的关键字从小到大有序排列,左边结尾数据都会保存右边节点开始数据的指针 非叶子节点的子节点数=关键字数(来源百度百科)(Mysql 的B+) B+相比

c630843901的博客 5万+

核烁文档批量处理用于批量处理日常办公文件的小工具软件

这是一个专门用于批量处理日常办公文件的小工具软件,比如:Word、Excel、PPT、PDF、文本和图片等等。它含了很多小功能,您可以单独使用这些小功能,也可以将多个功能组成一个任务流,同时进行批量处理。它最重要的特点是所有文件的处理都在您当前的这台电脑上进行,而不是我们的服务器,因此您不需要上传任何文件给我们。支持 Windows 7 (SP1)、8.1、10、11 及以上操作系统。

上一篇: 还不懂Redis是什么?一文带你深入Redis基本结构,准备向开发进军
下一篇: 你了解JVM垃圾回收机制及其实现原理吗?一文带你深入探讨
Java领域指导者
博客等级 码龄6年 404粉丝 265原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值