有个sql是这样写的
select count(*) from da_grxx u where u.pym like 'W%' and xm='王'
其中在pym这个字段上建立了索引
查看执行计划发现pym这个索引未生效
去掉后面的 xm='王'之后索引就生效了da_grxx这张表上建有5个索引,pym是个独立的索引,该表数据量50多万,pym like 'W%'的数据5000左右
还有,在另一环境下该sql索引又是有效的不知有人碰到这种奇怪的问题否??

解决方案 »

  1.   

    带like  一般会使索引失效但国为你在运行这个语句这前,可以运行个类似的语句绑定变量窥视的原因,导致使用的了索引你再运行语句之前,先运行下select count(*) from da_grxx u where u.pym like 'W%下次再运行,会因为绑定变量窥视原因,会使用索引详细的google 下,我也刚知道这点
      

  2.   

    你有分析你的表吗?把你的执行计划贴出来?用下面的句子你分析一下表:sql> exec dbms_stats.gather_table_stats(user, 'DA_GRXX', method_opt=>'for all indexed columns', cascade=>true);
      

  3.   

    analyze table da_grxx compute statistics for all indexes
    我用这个分析语句分析了一下,但还是有那个问题
    这样的分析语句同楼上的有区别吗
      

  4.   

    问题越来越奇怪了,当我把 'W%'改成小写的 'w%'索引又起作用了(后面的xm='王'都存在)
    唯一的区别是大写的查出的数据量是总数的14%左右,小写的只有很少的数据
      

  5.   

    pym like 'W%' 索引起作用
        like 'W%' and xm='王'  不起作用
        like 'WW%' and xm='王'  起作用
      

  6.   

    走不走索引是由优化器判断的
    为什么会得到这个结果就不清楚了
    可以试试用hint强制走索引