一个表有两个索引 1 和2
现在对表进行DELETE 和SELECT 操作 where条件一样。delete用1而select 却用索引2请高人指教这是怎么回事? 怎么能让delete操作也用索引2

解决方案 »

  1.   

    假如索引1是按字段(A,B),索引2是按字段(A,C,D),执行delete ... where A=value_a,和select A,C,D from ... where A=value_a,就可能出现你所说的情况。你最好给出索引的定义和所执行的SQL,此外看看执行计划。
      

  2.   

    SQL> create table emp2 as select * from scott.emp;
    SQL> create index idx_1 on emp2(empno);
    SQL> create index idx_2 on emp2(ename);
    -------------------------------------------------
    using idx_1 for delete:
    DELETE /*+ index(e idx_1)*/ FROM emp2 e WHERE e.empno = '111' AND e.ename = 'name';using idx_2 for select:
    SELECT /*+ index(e idx_2)*/ * FROM emp2 e WHERE e.empno = '111' AND e.ename = 'name';