看了相关oracle资料,以及网上查了下,都没谈及如下问题:
位图索引中某个键值的开始rowid,截止rowid如何定的,这个范围囊括了整个表的所有行的rowid吗?还是一个键值可能有多段的开始rowid,截止rowid?如果是前者,那rowid很简单,就是整个段的开始,结尾,但感觉是这样的话有点浪费空间呢。举例来说,如果有个1千万条记录的表。某列有10个键值。那么每个键值的开始rowid,截止rowid都是一样的吗,都是囊括了整个表的范围吗?谢谢各位大牛指教!

解决方案 »

  1.   

    就是你所想的那个样子 囊括了整张表每一行的rowid
    其实并不浪费空间 只是一个"位"而已呀 并没有把整行数据存进去起始ROWID:为位图的起始地址,即位图中第一行的ROWID。包括相对文件号,在相对文件中的块号,和块中的行号。
    终止ROWID:为位图的终止地址,即位图中最后一行的ROWID。也包括相对文件号,在相对文件中的块号,和块中的行号。
      

  2.   


    怎么我几天没来你就多了两朵大红花和一个小红星羡慕ing ~
    呵呵
      

  3.   

    谢谢。
    那么位图索引段所占的空间我能否如此大概估算,以1个1000万记录的表为例,就有1000万个rowid,一个rowid为1位,则有10000000/8/1024/1024=1.2Mb,也就是说每一个键值至少包含了2*1.2M的空间,假设有50个键值,那就100多兆,这个空间占用不可观吗?oracle需要把索引载到存储区中吧,这个对存储区的要求不是高了阿。不知大牛对索引段所占空间,对数据库运行的影响等,是如何理解的?请不吝指点一二。感谢!
      

  4.   

    你这么来计算大体上来讲应该没没错 当然 这只是我个人看法哦
    有两个地方需要指出
    1
    一个rowid不会只占1位的
    2
    在你的说法中 说一个键值占2*1.2M 这里为什么要乘2呢
    1位的话可以为0或者为1 就足以代表该位的值是否满足该键值了呀至于你说的100M空间 我觉得如果在一个比较大的系统里 100M的索引应该也还好吧
    呵呵 我没接触过太大的系统 所以也不能很准确的回答你
    不过一般来说索引通常都是会增加数据库运行性能的
      

  5.   

    8bit == 1 byte,兄弟。