冰城 发表于 2013-11-4 11:19:37

oracle中的索引和二元高度

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

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

       2.根结点的儿子数为;

       3.除根结点以外的非叶子结点的儿子数为;

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

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

       6.非叶子结点的关键字:K, K, …, K;且K < K;

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

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

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

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