Java教程

Java B+树

本文主要是介绍Java B+树,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

目录
  • B+树
    • 单行查询
    • 范围查询
    • 最左前缀原则

B+树

image

1.每一个父节点的元素都出现在子元素中,是子节点的最大(小)元素
2.由于父节点的元素都需要出现在子节点中,因此所有叶子节点包含了全量元素信息。并且每个叶子节点都带有指向下一个节点的指针,形成了一个有序链表。
3.只有叶子节点带有数据,其余节点仅仅是索引,没有任何数据相关

在数据库的聚集索引(Clustered Index)中,叶子节点直接包含卫星数据。在非聚集索引(NonClustered Index)中,叶子节点带有指向卫星数据的指针

B+ 树能够很好地配合磁盘的读写特性,减少单次查询的磁盘访问次数

B+树的优势
1.一层存储更多的元素,使得查询的IO次数更少。
2.所有查询都要查找到叶子节点,查询性能稳定。
3.所有叶子节点形成有序链表,便于范围查询。

单行查询

查找元素3,自顶向下

image

查询IO次数少,每次查询都必须查询到叶子节点,因为只有叶子节点存了数据。查找稳定。

范围查询

查找范围3到11的元素,自顶向下,查找到范围的下限(3)

image

最左前缀原则

最左前缀原则是发生在复合索引上的,只有复合索引才会有所谓的左和右之分。

当b+树的数据项是复合的数据结构,比如(name,age)的时候。

image

b+数是按照从左到右的顺序来建立搜索树的,比如当(张三,20)这样的数据来检索的时候,b+树会优先比较name来确定下一步的所搜方向,如果name相同再依次比较age,最后得到检索的数据。

当(20)这样的没有name的数据来的时候,b+树就不知道下一步该查哪个节点,因为建立搜索树的时候name就是第一个比较因子,必须要先根据name来搜索才能知道下一步去哪里查询
比如当(张三)这样的数据来检索时,b+树可以用name来指定搜索方向,但下一个字段age的缺失,所以只能把名字等于张三的数据都找到,即索引的最左匹配特性。

当你的逻辑需求是查到所有名字是“张三”的人时,可以快速定位到 ID4,然后向后遍历得到所有需要的结果。
如果你要查的是所有名字第一个字是“张”的人,你的 SQL 语句的条件是"where name like ‘张 %’"。这时,你也能够用上这个索引,查找到第一个符合条件的记录是 ID3,然后向后遍历,直到不满足条件为止。

这篇关于Java B+树的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!