位图索引适合与低聚合度,大型,少量写操作的数据仓库
如性别等字段
如果仅仅在一个字段上建立位图索引,是没有什么效果的
位图索引适合于多个位图索引列联合检索的时候,会有很好的效果
如where a=5 and b=false and c=0假如a,b,c上都有位图索引
------------------
注意,大量写操作的表建立位图索引会降低性能
关于具体的说明,请参考文档

解决方案 »

  1.   

    其实 penitent(只取一瓢) 兄说得满好的,不过我还要进行一下补充。对于一个表在查询时所使用的查询计划,取决于以下几点。
    1、optimizer_mode初始化参数,其默认值为choose即如一个表有索引,没statistics信息,则表在查询在查询时执行基于规则(rule),否则执行基于代价(cost)的检索方式。2、还有一个重要的因素是表的大小,如果优化器发现表只有几行的数据,即使有索引它也不会考虑的,而不是是否是因为bitmap index的因素。
      

  2.   

    我想
    如果是 select count(*) from test where a=5 ;
    应该会使用 bitmap索引的
    最好做一次analyze但是 select * from test where a=5 ;
    你认为使用索引会比较快么?
    假如数据覆盖有 20% ,你认为通过索引会很快?你知道bitmap的索引结构嘛col value        bitmap数据(bit)(开始rowid x,终止rowid x+ 14)
    1                00011101010101
    2                10100000000000
    3                01000010000000
    4                00000000100000
    5                00000000001010上面是一个例子了,包含数据条数为 bit 数量 10条数据,假设数据全部连续存储在磁盘上
    这样的结构下
    bitmap 只存储了起始rowid 和 结束rowid并且不用重复的保存column  value
    从而降低了IO
      

  3.   

    http://asktom.oracle.com/pls/ask/f?p=4950:8:1878747::NO::F4950_P8_DISPLAYID,F4950_P8_CRITERIA:961030020653,%7Bbitmap%7D
      

  4.   

    hrb_qiuyb(大森林) 说的第2点这篇文章中也提到了,建议加大数据量测试
    注意这一句话
    the optimizer felt pretty sure that 1/3(一个比较大的数值) of the table 
    would be accessed via the index and hence a full scan was in order