呵呵,这是因为你对BITMAP索引的不了解。
BITMAP索引只适合建立在dss(决策支持系统)而不适合oltp(在线事务处理系统)
你的这种情况,如果需要频繁的插入或修改或删除,都不适合建立BITMAP索引,否则,只会引起性能的下降。
BITMAP索引的机制是建立一个二进制的索引表,适合于那些重复量很大的字段,如性别等。在查询时,一个BITMAP索引也根本起不了什么作用,需要多个BITMAP索引,通过oracle自己的一个合并的算法,最快的取到数据。
频繁执行DML语句的数据表,都属于oltp(在线事务处理系统),BITMAP索引需要频繁的建立与维护自己的二进制索引表,速度所以就慢了。
还有,BITMAP索引在表数据量越大,执行dml的时候,它需要维护的索引就越多,速度慢是理所当然的。

解决方案 »

  1.   

    楼主咨询一下,我以前建bitmap索引一直建不起来,请问是不是要打开什么参数?
      

  2.   

    to penitent(只取一瓢) 那我的很多SELECT语句中的WHERE条件都要用到一些
    只有两三种值的字段,如:
    select * from table where c1='m'
    其中c1只有两个值m或f
    这时候既然BITMAP会降低性能,那我怎么提高查询的性能呢?
      

  3.   

    其实,如果你的表仅仅是有一个字段可以建立位图索引,也没有多大效果.
    这种字段建立b_tree索引也没有效果.
    就这样吧,速度很慢吗?