4层的索引,可以索引多少rows?

作者:grassbell | 分类: 大话技术 | 标签: | 日期:2008-03-18

比如一个index entry 是18bytes,一个8k的block,PCTFREE=10%,则可以存放8*1024*0.9/18=410,约为400个index entries
如果一个表有100,000,000 rows,那么需要250,000 leaf blocks
在算算branch:每个branch 记录了每个leaf的最大值和address,大约16 bytes。这样可以存储大约450 个 branch index entries
也就是说需要250000/450=556个branch block。
但是556个branch又需要多少个再上一级的branch block 来管理呢?
因为一个branch最多存储450个leaf entries,所以至少又需要2个branch blocks。
然而这两个branch blocks,还需要一个block来管理,这个block就是root 了。
BLEVEL 1 = 1 branch block
BLEVEL 2  = 2 branch blocks
BLEVEL 3 = 556 branch blocks
Leaf level(BLEVEL 4) = 250,000 leaf blocks
Table rows = 100,000,000 rows
所以一个4层的索引,至少就可以管理1亿条记录。

3人发表了评论  ↓发表评论↓
  • 这个是周会说的问题。

    明白了!!

    vogts @ March 21, 2008 |

  • 多的去了,如果一个index entry 只有18bytes的话,一个root(本质上oracle还是称为branch)节点上可以有500多个指针,所以1亿只是 1/500 而已。

    当然实际上 大多索引(除了数字类型) 都不会只有18bytes而已。

    fcp @ March 21, 2008 |

  • 现在oracle的索引是不是最多支持32层,记得刘易斯做个一个实验,把索引做成了2叉树,不断生成数据,最后超过32层的时候数据库crash了

    八神 @ March 26, 2008 |

表情:<( ̄︶ ̄)> | (⊙ˍ⊙) | >﹏< | b( ̄▽ ̄)d | (─.─||) | (^_-)

[ Ctrl+Enter提交 ]

阿里巴巴DBA出品