表test大概2000万数据,column A,B,C
如果我的查询条件包含A,B
A,B都分别建有索引,但没有权限建A,B的联合索引,有没有办法在查询的时候先用A的索引再用B得索引?

解决方案 »

  1.   

    看看执行计划,在SQL*PLUS下用
    SQL>SET AUTOT ONOracle自动优化查询语句,两个索引的无论先使用哪一个所用的时间应该是一样的。
      

  2.   

    如果楼主要强制使用A索引再用B索引,可以加提示HINT
    假设在A列建的索引名为index_aselect /*+ index(a index_a) */
      from test
     where a=valuea and b=valueb;
      

  3.   


    谢谢您的解答,不过这样只是使用了A的索引,没使用B的,如果用hints 把A,B的索引放上去B的索引不能生效
      

  4.   

    两个索引都用,效率往往更低,所以,oracle不提供这样的方式
      

  5.   

    嗯,如果用A,B的联合索引会极大的提高效率,不过因为表比较大,对磁盘空间有影响,所以不能建。其实是想知道下能不能在不建联合索引的情况下,把A,B的索引都用上
      

  6.   

    使用多个索引,方法很多,你可以比较以下:
    1)hints:  /*+ index(a i1 i2) */
    2)hints:  INDEX_JOIN(hash join)
    3)hints:  and_equal(merge join 算法),在oracle 10g中已经淘汰
    4)hints:  INDEX_COMBINE(bitmap join算法)
    以上提示都有限制,请查询相关资料后再使用.