oracle中的索引和二元高度

本帖最后由 冰城 于 2013-11-4 11:36 编辑

问题一:
oracle官方文档也说oracle默认的索引为b树索引,但是真正的b树索引要满足一下条件:
      
       1.定义任意非叶子结点最多只有M个儿子;且M>2;

       2.根结点的儿子数为[2, M];

       3.除根结点以外的非叶子结点的儿子数为[M/2, M];

       4.每个结点存放至少M/2-1(取上整)和至多M-1个关键字;(至少2个关键字)

            5.非叶子结点的关键字个数=指向儿子的指针个数-1;

       6.非叶子结点的关键字:K[1], K[2], …, K[M-1];且K < K[i+1];

       7.非叶子结点的指针:P[1], P[2], …, P[M];其中P[1]指向关键字小于K[1]的子树,P[M]指向关键字大于K[M-1]的子树,
         
        其它P指向关键字属于(K[i-1], K)的子树;

       8.所有叶子结点位于同一层;

按照这个分析,我觉得oracle默认的索引并不是真正的b树索引,倒像是b*树。请问高手是这样的吗?此问题我很是迷惑我,希望高手或专家能指点迷津。(如下图您觉得像b树所说的吗)

问题二:
不少书上,博客上都说一个索引二元高度为3,那么它要读取4个数据块儿,3个来自索引,1个来自表。如果真是这样,索引的二元高度就等于索引树的高度了,那么想请问下二元高度为0的索引又怎么解释?
(个人理解:如果索引的二元高度为0,那么就是一个节点,也就是叶子节点(也可以说是根节点),当通过索引访问数据表中的某一行时,怎么也得读两个块儿,一个来自索引块儿,一个来自数据表的块儿。所以我认为索引的二元高度并不等于索引的树的本身高度,应该是二元高度+1才等于索引树的高度,不知道这样说有没有问题没,希望高手指点。
2013-11-04_110606.png
标签: 暂无标签
冰城

写了 3 篇文章,拥有财富 69,被 2 人关注

转播转播 分享分享 分享淘帖
回复

使用道具

成为第一个吐槽的人

您需要登录后才可以回帖 登录 | 加入社区

本版积分规则

意见
反馈