create table ppt1
(
dual varchar(8)
)
 
create table ppt2
(
dual varchar(8)
)create index IDX_DZ_DF_TT_200902_4 on ppt1 (TO_NUMBER(dual))create index IDX_DZ_DF_TT_200902_1 on ppt2 (TO_NUMBER(dual)+1)select * from 
ppt1 a,ppt2 b
where to_number(a.dual) = to_number(b.dual)+1最后的执行计划用的全表扫

解决方案 »

  1.   

    楼主测试用的表估计没多少数据,用小表,则索引的代价可能全表扫描还高,就不会用索引了。还有一种可能是to_number(a.dual) = to_number(b.dual)+1 这个关联本身涉及的数据量在整个表中的数据中占大部分。
      

  2.   

    Oracle 用的是cost based optimizer
    对建了索引的字段作为查询条件不一定会使用索引。
    比如像楼上各位所说的,表的数据很少,可能会采用全表扫描。