查询语句:select t.* from invoice_makeinv t order by t.makeinv_billcode
执行计划:SELECT STATEMENT, GOAL = ALL_ROWS 518            5474       2074646  
 SORT ORDER BY 518               5474 2074646  
  TABLE ACCESS FULL  GZJBWL INVOICE_MAKEINV 72 5474 2074646  

解决方案 »

  1.   

    很正常,因为你是select t.*,
    如果是select t.makeinv_billcode就可能走索引。
    因为是select t.*,如果走索引,还要根据每个索引项去访问表,还没有读全表然后排序来得快。
      

  2.   

    select t.* from invoice_makeinv t order by t.makeinv_billcode你想要怎么走索引,走什么索引?
      

  3.   

    1)试试收集这个表的统计信息,之后再看看计划如何
    2)优化器基于CBO规则,可能认为你的语句全表扫消费的成本比索引开销来得低
    你可以强制让Oracle走索引, /*+ index(表名 索引名) */,然后比较这个的cost
      

  4.   

    友情提醒一下,最好看看一下你的oracle版本,oracle9i的优化器不是很智能,主要还是可能存在基于规则优化器。
    而9以后基于cbo优化器,主要看执行计划去决定是否应该走索引,不是走索引就一定优于全表扫描。
      

  5.   

    select t.* from invoice_makeinv t order by t.makeinv_billcode
    你这个是查询整张表的所有数据,当然是全表扫描然后排序了
    你如果要让该语句走索引,有两种情况:
    1.where条件后跟索引列进行帅选
    2.选择列(即t.*)改为索引列
      

  6.   

    select t.*,应该是没走你定义的索引,这个是全表扫描,你应该从你定义索引的那个字段select