为什么我的同一个表中,有两个字段。当查询
select distinct mbrid,dos from fi05 where 
(
dx5 in('40201', '40211', '40291', '40401', '40411',  '40491','4280', '4281', '42820','42821','42822','42823',' 42840','42841','42842','42843')
or dx6 in('40201', '40211', '40291', '40401', '40411',  '40491','4280', '4281', '42820','42821','42822','42823',' 42840','42841','42842','42843')
) 的时候这个表就不使用位图索引查询啊?(两个字段都建有同样的位图索引)
但是当单独查询dx5的时候也就是
select distinct mbrid,dos from fi05 where 
(
dx5 in('40201', '40211', '40291', '40401', '40411',  '40491','4280', '4281', '42820','42821','42822','42823',' 42840','42841','42842','42843')
) 就是用索引啊。 为什么有dx6就不使用索引啊?
都有什么样的可能啊??^^

解决方案 »

  1.   

    ORACLE 提供了CBO、RBO两种SQL优化器。你的估计是CBO。ORACLE(对CBO而言)只在合理的时候才会使用索引。
    在你http://topic.csdn.net/u/20090924/13/ccfd0e57-58a1-4dc6-baf8-ef7939072016.html?46609这个帖子中提到,如果是两个表的话,那么就先用dbms_stats.gather_table_stats分析一下表的统计信息以便ORACLE做出正确的判断是否使用索引。
    在本帖中的情况,运行一个查询,如果只需表中相对较少的数据,CBO会使用索引;但是如果估计通过索引获取的行数超过了一个阈值,优化器将开始全表扫描。
      

  2.   

    如果是频繁dml的表最好不要建位图索引,会严重影响并发的。
      

  3.   

    为什么我同样结构的,同样数据的两个字段(a1,a2),建立同样的位图索引。怎么其中一个可以使用位图索引,另一个不使用位图索引啊?
    只要把不使用位图索引的那个字段放到sql语句中,那么这整个sql语句就都不使用索引了……
    这是为什么啊?
    急啊?? 我没有分了 
    谢谢各位帮忙解决一下啊!  我的版本是oracle10g的 数据量是70w