今天看了oracle B-TREE和bitmap索引,在网上查了资料http://www.oracle.com/technology/global/cn/pub/articles/sharma_indexes.htmloracle官方解释
但是还是没有怎么明白
我自己的理解是,有序表的话使用b-tree索引要好些,无序的表使用bitmap要好些
但是这种理解,感觉很肤浅,望高人指点,谢谢

解决方案 »

  1.   

    bitmap适合字段值基本是重复的,如性别:男和女
    但要注意bitmap对于并发操作时,改一条会锁了很多记录,因为在一个索引集上
    不知lz明白不
      

  2.   

    举例 字段A值为





    那么每个bitmap索引会有5位 
    男的条目 11010
    女的条目 00101
    因为所有的记录在一个都在索引条目上,所以修改或增加时会一起锁定
      

  3.   

    那如果使用bitmap,岂不是很差,一个用户修改一条信息,他把相同的记录都锁住了?
      

  4.   

    谢谢分享。请问如何建立位图索引?我还是baidu一下吧。
      

  5.   

    楼主的这个贴子不错啊,才看到:很清楚在此表中,B-tree 索引比 EMPNO 列上的位图索引更小...
      

  6.   

    一个存储具体值一个用bit表示当然少得多
      

  7.   

    Vivek Sharma是Oracle认证专家,擅长于性能调整和SQL-PL/SQL 优化。
    看来,性能优化的一切都来自于测试!
    敬佩此等高手!
    贴引:1.位图索引,它使用索引来响应该查询。
      B-tree 索引,优化程序选择了全表扫描;
      2.位图索引也可以索引空值(与 B-tree 索引不同)。3.DSS 系统中的位图索引支持即席查询;
      B-tree 索引不支持即席查询。4.B-tree 索引更适合于 OLTP 应用程序;
      使用位图索引,优化程序可以有效地响应包括 AND、OR 或 XOR 的查询;5.对于 B-tree 索引,它会考虑群集因子的值;
      使用位图索引生成执行计划时,该优化程序不考虑群集因子的值。"有序表的话使用b-tree索引要好些,无序的表使用bitmap要好些。"  --楼主的理解看来是正确的。 
      

  8.   

    位图索引没用过。
    这东西只在OLAP或者数据仓库中用,或者你的表只读也行。
    有DML操作的表一般都不会用位图索引的。带来的后果会非常严重。
      

  9.   

    我查阅了相关书籍,有句话这样说的,望高手帮我理解一下,谢谢
    在位图索引中修改键值列需要使用段一级的锁,而B-TREE索引使用的是行一级的锁
      

  10.   

    书上下的结论:
    b-tree索引可能更适合于OLTP系统,因为在OLTP系统中DML的操作比较频繁。
    bitmap索引更适合于Data Warehouse系统,因为在Data Warehouse系统中表一般都比较大但是静态的并且查询较为复杂
      

  11.   

    这与算法有关系,bitmap本身就是选择性比较低的列比较使用,如性别,但在oltp中,频繁的更新操作会导致大量的enqueue events出现.而且是btree,则是选择性越高越好,如在sequence上面的b-tree(当然该索引上的块竞争是另外一回事)