数据库索引采用B+树不采用B树的原因

简介: B+树所有数据存储于叶子节点,分支仅作索引,便于遍历与范围查询。内部节点不存数据,提升缓存命中率,降低磁盘IO代价。查询路径长度一致,效率稳定,适合数据库索引场景。

● B+树更便于遍历:由于B+树的数据都存储在叶子结点中,分支结点均为索引,方便扫库,只需要扫一遍叶子结点即可,但是B树因为其分支结点同样存储着数据,我们要找到具体的数据,需要进行一次中序遍历按序来扫,所以B+树更加适合在区间查询的情况,所以通常B+树用于数据库索引。
● B+树的磁盘读写代价更低:B+树在内部节点上不包含数据信息,因此在内存页中能够存放更多的key。 数据存放的更加紧密,具有更好的空间局部性。因此访问叶子节点上关联的数据也具有更好的缓存命中率。
● B+树的查询效率更加稳定:由于非终结点并不是最终指向文件内容的结点,而只是叶子结点中关键字的索引。所以任何关键字的查找必须走一条从根结点到叶子结点的路。所有关键字查询的路径长度相同,导致每一个数据的查询效率相当。
● B+树更适合基于范围的查询 :B树在提高了IO性能的同时并没有解决元素遍历的效率低下的问题,正是为了解决这个问题,B+树应用而生。B+树只需要去遍历叶子节点就可以实现整棵树的遍历。而且在数据库中基于范围的查询是非常频繁的,而B树不支持这样的操作或者说效率太低。

相关文章
|
存储 数据库 索引
数据结构——B树和B+树
数据结构——B树和B+树
445 0
数据结构——B树和B+树
|
网络架构
ping会出现的两种问题-----time out 和 unreachable
ping会出现的两种问题-----time out 和 unreachable
1736 4
|
Java 关系型数据库 MySQL
详解 MyBatis 事务管理,彻底颠覆你对事务的理解!
详解 MyBatis 事务管理,彻底颠覆你对事务的理解!
1359 0
详解 MyBatis 事务管理,彻底颠覆你对事务的理解!
|
Java Spring
Spring Aop 常见注解和执行顺序(上)
Spring 一开始最强大的就是 IOC / AOP 两大核心功能,我们今天一起来学习一下 Spring AOP 常见注解和执行顺序。
595 0
Spring Aop 常见注解和执行顺序(上)
|
存储 缓存 JSON
nacos源码分析-服务注册(服务端)
一篇文章我们了解了《Nacos服务注册》客户端源码,本篇文章我们来看一下服务注册Nacos服务端的源码执行情况。首先需要下载Nacos源码, https://github.com/alibaba/nacos/releases/tag/1.4.3 ,
nacos源码分析-服务注册(服务端)
|
Java
SpringBoot实现统一异常处理
大家在使用SpringBoot开发项目的时候肯定都需要处理异常吧,没有处理异常那么异常信息直接显示给用户这是非常不雅观的,同时还可能造成用户误会,那么今天我们就来简单的写一下如何在SpringBoot项目中实现统一的异常处理。
658 0
|
SQL Cloud Native NoSQL
分布式事务Seata源码解析九:分支事务如何注册到全局事务
分布式事务Seata源码解析九:分支事务如何注册到全局事务
1299 0
分布式事务Seata源码解析九:分支事务如何注册到全局事务
|
消息中间件 数据库 RocketMQ
分布式事务常见解决方案
分布式事务常见解决方案
2927 0
|
SQL 关系型数据库 MySQL
基于proxysql实现MySQL读写分离
基于proxysql实现MySQL读写分离
690 0
|
存储 Java 编译器
方法区、永久代、元空间之间有什么关系
方法区、永久代、元空间之间有什么关系

热门文章

最新文章