有关系的,数据量小的话,CBO认为走全表扫描成本更低,所以就走了全表了,你可以加多点数据再测试一下,或者让它强制走索引,看下成本是不是比走全表扫描成本更高。

解决方案 »

  1.   

    SELECT /*+INDEX(CUST,CUST_F)*/ * FROM CUST WHERE UPPER(LAST_NAME)>='CY';
    这样让它走索引
      

  2.   

    你这种小数据量走不走索引要看optimizer_mode的设置
    oracle默认执行计划应该是基于代价的。show parameter optimizer_mode;看一下你当前会话的optimizer_mode
    应该默认是ALL_ROWS
    如果你想强制使用索引,改为RULE看下,强制会话执行基于规则alter session set optimizer_mode=rule;不建议修改这个参数。
      

  3.   

    oracle执行sql时选择哪种执行计划是通过预判取数代价决定的。如果你查询的数据几乎是全表的数据,那么全表扫描比索引代价更小,oracle肯定会选择全表扫描;如果查询数据只是某些特殊数据,那索引就很快。