Oracle FAQ | Your Portal to the Oracle Knowledge Grid |
Home -> Community -> Usenet -> c.d.o.server -> Re: Which index is used when multiple are valid
> Hi guys,
> I've been asked a question for which I'm not too sure. We use Oracle
> 9.2, with RBO (we're stuck with that choice because we use Siebel,
> please don't go there...). One of the DBA's asserts that if 2 indices
> are valid for a query, then the one created the latest will be used.
> Here's an example to make things clearer:
>
> select * from my_table where col_a = 'A' and col_b = 'B';
>
> Let's say I have 2 examples on this table: ind_a(col_a, col_b) and
> ind_b(col_b, col_a). Which one will my query use, and why?
Daniel,
This is a case for explain plan:
create table my_table (
col_a varchar2(10),
col_b varchar2(10)
);
begin
for i in 1 .. 10000 loop
insert into my_table values(
dbms_random.string('l',10), dbms_random.string('l',10)
create index ind_a on my_table(col_a, col_b);
create index ind_b on my_table(col_b, col_a);
delete plan_table;
EXPLAIN PLAN FOR
select * from my_table where
col_a = 'kdofifockw' and
col_b = 'qodkfwkcka';
select
substr (lpad(' ', level-1) || operation ||
' (' || options || ')',1,30 ) "Operation",
object_name "Object"from
It returns:
Operation Object ------------------------------ ------------------------------ SELECT STATEMENT () INDEX (RANGE SCAN) IND_B
=> so, it uses ind_b.
hth
Rene
-- Rene Nyffenegger http://www.adp-gmbh.chReceived on Mon Nov 03 2003 - 12:38:16 CST