暂无图片
数据库索引的原理,为什么要用 B+树?
我来答
分享
T
Ty3306
2022-12-17
数据库索引的原理,为什么要用 B+树?

数据库索引的原理,为什么要用 B+树?

我来答
添加附件
收藏
分享
问题补充
3条回答
默认
最新
Oracle

可以从几个维度去看这个问题,查询是否够快,效率是否稳定,存储数据多少,以及查找磁盘次数,为什么不是二叉树,为什么不是平衡二叉树,为什么不是B树,而偏偏是B+树呢?

为什么不是一般二叉树?

如果二叉树特殊化为一个链表,相当于全表扫描。平衡二叉树相比于二叉查找树来说,查找效率更稳定,总体的查找速度也更快。

为什么不是平衡二叉树呢?

我们知道,在内存比在磁盘的数据,查询效率快得多。如果树这种数据结构作为索引,那我们每查找一次数据就需要从磁盘中读取一个节点,也就是我们说的一个磁盘块,但是平衡二叉树可是每个节点只存储一个键值和数据的,如果是B树,可以存储更多的节点数据,树的高度也会降低,因此读取磁盘的次数就降下来啦,查询效率就快啦。

那为什么不是B树而是B+树呢?

1)B+树非叶子节点上是不存储数据的,仅存储键值,而B树节点中不仅存储键值,也会存储数据。innodb中页的默认大小是16KB,如果不存储数据,那么就会存储更多的键值,相应的树的阶数(节点的子节点树)就会更大,树就会更矮更胖,如此一来我们查找数据进行磁盘的IO次数有会再次减少,数据查询的效率也会更快。

2)B+树索引的所有数据均存储在叶子节点,而且数据是按照顺序排列的,链表连着的。那么B+树使得范围查找,排序查找,分组查找以及去重查找变得异常简单。




暂无图片 评论
暂无图片 有用 1
打赏 0
暂无图片
yBmZlQzJ
2022-12-17
回答太详细了~~~
哇哈哈
2022-12-17
回答太详细了~~~
风车
2022-12-19
B+树索引的所有数据均存储在叶子节点,而且数据是按照顺序排列的,链表连着的。那么B+树使得范围查找,排序查找,分组查找以及去重查找变得异常简单。
展开全部评论(1条)

存储结构具有两个特性:一是要适合磁盘存储,二是要允许并发操作。只有同时具备这二个特性,才能做为存储结构。

暂无图片 评论
暂无图片 有用 2
打赏 0
yBmZlQzJ

回答太详细了~~~

暂无图片 评论
暂无图片 有用 2
打赏 0
回答交流
Markdown


请输入正文
提交
相关推荐
id是地点编号,name是人员名称,求接触过的人员集合。有人会不?
回答 1
这个问题的本质应该是求并查集(unionfind)可以搜索看看相关的代码算法
mysql库 查询耗时较长的sql
回答 2
selectfromsys.statementswithfulltablescans;这个里面有权标扫描的语句。
华为云裸金属 部署11g RAC,共享盘为一块独立的高性能磁盘,划分三个分区用于ASM(OCR/DATA/FRA),请问是否可行?
回答 1
为什么不弄3块盘呢?如果磁盘不够用的话,我觉得adg也是个不错的选择
MySQL有没有类似Oracle中INTERVAL分区的功能
回答 7
已采纳
mysql不能自动添加分区,建议使用脚本或者event管理。
mysql如何远程查询oracle数据库的表
回答 1
oracle可以通过odbc连接到mysql反过来可能还没尝试过
--hex-blob 参数具体含义是啥?
回答 1
该参数将下面数据类型的栏位的数据以十六进制的形式导出BINARYVARBINARYBLOBBIT以及binary字符集的数据3.1内容比较我们首先看使用该参数后mysqldump文件的内容再看下未使用
MYSQL 最后 ORDER BY sort , SORT 不是字段, 也不是 AS 匿名字段. SORT有什么作用?
回答 3
selectid,name,btntype,permissionfromsysresourceswherebtntypein(0,1,2)andresourcetype1orderbysortMYSQ
请问下mysql 的decode 怎么用呢?
回答 1
已采纳
mysql没有decode函数,可以用casewhen
mysql中的双1是什么含义
回答 4
已采纳
mysql的"双1验证"指的是innodbflushlogattrxcommit和syncbinlog两个参数设置,这两个是是控制MySQL磁盘写入策略以及数据安全性的关键参数。下面从参数含义,性能,
LOCK_MODE: X,GAP ,这种表示啥锁?
回答 1
,表示并列的意思(既…又).比如你createtable的时候字段间就是使用,隔开(update也是,别写成and哈).另一种是trxid10078lockmodeXlocksrecbutnotgap