赞
踩
1.B树中同一键值不会出现多次,并且它有可能出现在叶结点,也有可能出现在非叶结点中。而B+树的键一定会出现在叶结点中,并且有可能在非叶结点中也有可能重复出现,以维持B+树的平衡。
2.因为B树键位置不定,且在整个树结构中只出现一次,虽然可以节省存储空间,但使得在插入、删除操作复杂度明显增加。B+树相比来说是一种较好的折中。
3.B树的查询效率与键在树中的位置有关,最大时间复杂度与B+树相同(在叶结点的时候),最小时间复杂度为1(在根结点的时候)。而B+树的时候复杂度对某建成的树是固定的。
下面是从Oracle Concept中摘出来的B树索引的图片:
有几点需要注意:
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列的排序的时候派上用场!
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。