OR子句是否会抑制oracle中的索引?

P S*_*rma 1 sql oracle indexing plsql

OR子句是否会抑制索引,如果是,有人可以提供适当的示例吗?

create table test2(field1 varchar2(100),field2 varchar2(100),
                   field3 number,field4 varchar2(100));

create index test2_idx1 on test2(field1);

create index test2_idx2 on test2(field3);

declare
  j number :=1;
begin
  for i in 1..500000 loop
    insert into test2 (field1,field2,field3,field4)
    values('field1='||j,'field2='||i,j,'field4='||??i);
    if (i mod 1000)=0 then 
      j:= j+1;
    end if; 
  end loop;
  commit;
end;

EXEC DBMS_STATS.GATHER_TABLE_STATS ('user', 'test2');

select * from test2 where field1='field1=1' or field3=1;
Run Code Online (Sandbox Code Playgroud)

OMG*_*ies 9

不,使用该OR子句不会导致索引不被使用.
OR条款只会破坏过滤决策路径,并且根据所涉及的查询和数据的复杂性,这可能非常昂贵.