有表:TB_GATHERADDR 我针对STATE 、addrtype 分别建立了索引A、B:
1:select * from TB_GATHERADDR where    (STATE =2 or STATE=3) and addrtype = '门址'  order by addrnamestd查询结果一个索引没有用上
2:select * from TB_GATHERADDR where STATE =2 查询结果使用了索引A
3:select * from TB_GATHERADDR where STATE =3 查询结果没有使用任何索引
4:select * from TB_GATHERADDR where addrtype = '门址' 查询结果没有使用任何索引其中A一个星期前建的,B是刚建的,是不是索引刚建立不能被使用到。

解决方案 »

  1.   

    先分析表一下
    analyze table TB_GATHERADDR compute statistics;然后你看看
    select count(1) from TB_GATHERADDR where STATE =3 
    select count(1) from TB_GATHERADDR where addrtype = '门址'
    这个语句能查出多少数据量,如果占总数据量的百分比很大,是正常的
      

  2.   

    1:select  * from user_indexes where INDEX_NAME="";
    检查索引是否有效
    如果失效,重新索引2:oracle认为走全表扫描更高效,这时候你可以HINTS强制走索引,但是效率可能更低 select /*+索引名称*/ 。
      

  3.   

    分析完select * from TB_GATHERADDR where addrtype = '门址'能用上索引了。
    1.STATE =2 查询结果使用了索引A;STATE =3 查询结果用不上索引
    2.where (STATE =2 or STATE=3) and addrtype = '门址'  想同时使用 stata和addrtype的索引可以吗