查询语句: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
执行计划:SELECT STATEMENT, GOAL = ALL_ROWS 518 5474 2074646
SORT ORDER BY 518 5474 2074646
TABLE ACCESS FULL GZJBWL INVOICE_MAKEINV 72 5474 2074646
如果是select t.makeinv_billcode就可能走索引。
因为是select t.*,如果走索引,还要根据每个索引项去访问表,还没有读全表然后排序来得快。
2)优化器基于CBO规则,可能认为你的语句全表扫消费的成本比索引开销来得低
你可以强制让Oracle走索引, /*+ index(表名 索引名) */,然后比较这个的cost
而9以后基于cbo优化器,主要看执行计划去决定是否应该走索引,不是走索引就一定优于全表扫描。
你这个是查询整张表的所有数据,当然是全表扫描然后排序了
你如果要让该语句走索引,有两种情况:
1.where条件后跟索引列进行帅选
2.选择列(即t.*)改为索引列