教你如何成为Oracle 10g OCP - 第九章 对象管理(9) - 位图(Bitmap)索引

 

9.2.6  位图(Bitmap)索引


http://space.itpub.net/9842/viewspace-343286 

位图索引是另外一个索引类型,组织形式和b-tree索引相同,也是一颗平衡树,区别
在于叶子节点里存放索引条目的方式不同。前面知道,B数索引的叶子节点对于表里
的每个数据行,如果索引列的值不为空,则会为这个记录行在叶子节点中维护一个
对应的索引条目。 而位图索引则不是这样,叶子节点中存放的索引条目如下:
http://space.itpub.net/9842/viewspace-343286

位图索引非常适用于DSS及数据仓库系统,他们可以使用较少的基数(唯一键数目,
比如男和女,基数为2)列,访问非常大的表,尽管位图索引最多可以达到30个列,
但是一般都只用于少量的列。对于那些有较低基数的列要使用位图索引。位图索引
对于低基数(少量不同值)的列来说非常快,这是因为索引的大小相对于B树索引来说
小很多,因为这些索引是低基数的B树索引。


在表上建立索引后,位图索引条目上(叶子节点中)还包含表里第一条记录所对应的rowid
及最后一条记录所对应的rowid, 所以条目的最后一部分则是由多个bit位组成的bitmap,
每个bit位就对应一条记录。 格式:

key   start rowid    end rowid      bitmap
<01,     AAAAAA    ,   ZZZZZZ ,   1000100100011001001 >
<02,     AAAAAA    ,   ZZZZZZ ,   0101100100011100010 >
<03,     AAAAAA    ,   ZZZZZZ ,   0000100101101001001 >


bitmap中没有直接记录rowid, 而是记录了一个位图, 位图中的每一个bit位都对应一个rowid,
之间有转换关系的.所以用bitmap索引的时候你可以在执行计划里看到 bitmap to rowid 这样的步骤.

 


当我们发出where c1='01'这样的SQL时,oracle会搜索01所在的索引条目,然后扫描该
索引条目中的bitmap里的所有bit位。第一个bit位是1,表示第一条上的c1的值是01,
于是返回第一条记录所在的rowid(根据该索引条目里记录的start rowid加上行号得到
该记录所在的rowid), 第二个bit位为0, 则说明第二条记录上的c1值不为01,依此类推。
特别注意,如果索引列为空,也会在位图索引中记录,对应的bit位为0 ;

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/35489/viewspace-687520/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/35489/viewspace-687520/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值