当前位置:   article > 正文

oracle是b-树吗,B树和B加树的区别,再理解Oracle的B-Tree Index

oracle是b-树吗,B树和B加树的区别,再理解Oracle的B-Tree Index

1.B树中同一键值不会出现多次,并且它有可能出现在叶结点,也有可能出现在非叶结点中。而B+树的键一定会出现在叶结点中,并且有可能在非叶结点中也有可能重复出现,以维持B+树的平衡。

2.因为B树键位置不定,且在整个树结构中只出现一次,虽然可以节省存储空间,但使得在插入、删除操作复杂度明显增加。B+树相比来说是一种较好的折中。

3.B树的查询效率与键在树中的位置有关,最大时间复杂度与B+树相同(在叶结点的时候),最小时间复杂度为1(在根结点的时候)。而B+树的时候复杂度对某建成的树是固定的。

下面是从Oracle Concept中摘出来的B树索引的图片:

a4c26d1e5885305701be709a3d33442f.png

有几点需要注意:

1.Index中Key是顺序的。

2.Index 中的 Key和rowid 都在 Leaf Block 里面,在Branch

中没有。这和理论上的B树“B树中同一键值不会出现多次,并且它有可能出现在叶结点,也有可能出现在非叶结点中。”有些不同。

3.Leaf Block之间有双向链表,这也就是为什么Index Rang Scan

可以很快的原因。而这个在B树(不是说B树的变种)的理论中也是没有的。

4.而下面有一段从Concept中的话“

By specifying the DESC keyword in the CREATE

INDEX statement, you can create a descending index. In this case, the index stores data

on a specified column or columns in descending order. If the index

in Figure

3-1 on the employees.department_id column were

descending, then the leaf blocking containing 250

would be on the left side of the tree and block with 0

on the right. The default search through a descending index is from

highest to lowest value.

Descending indexes are useful when a query sorts some

columns ascending and others descending. For an example,

assume that you create a composite index on the

last_name and department_id columns as

follows:

CREATE INDEX emp_name_dpt_ix ON hr.employees(last_name ASC, department_id DESC);

5. 为什么在这段话中,关于倒序索引中具体例子会有两个字段呢? 因为我们知道正序的Index所有的Leaf Block都是双向链表,如果单个字段,倒过来排序也很快,倒序索引就没什么存在的必要性。而当有两个字段,一个正序排,一个倒序排,加入存储的又是顺序,这排起来就困难得很,此时这个索引的价值就体现出来了。

6. Distinct,Group By,Order By 都有隐含的排序需求。

7. B-Tree Index 可以提高检索速度的同时,也可以在有Index列的排序的时候派上用场!

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小小林熬夜学编程/article/detail/613438
推荐阅读
相关标签
  

闽ICP备14008679号