Pergunta

Se eu criar um índice nas colunas (A, B, C), nessa ordem, meu entendimento é que o banco de dados poderá utilizá-lo mesmo que eu pesquise apenas em (A), ou (A e B), ou ( A e B e C), mas não se eu pesquisar apenas em (B), ou (C), ou (B e C).Isso está correto?

Foi útil?

Solução

Na verdade, existem três métodos de acesso baseados em índice que o Oracle pode usar quando um predicado é colocado em uma coluna não inicial de um índice.

i) Skip-scan do índice: http://download.oracle.com/docs/cd/B19306_01/server.102/b14211/optimops.htm#PFGRF10105

ii) Verificação rápida e completa do índice: http://download.oracle.com/docs/cd/B19306_01/server.102/b14211/optimops.htm#i52044

iii) Índice de varredura completa: http://download.oracle.com/docs/cd/B19306_01/server.102/b14211/optimops.htm#i82107

Tenho visto com mais frequência a rápida verificação completa do índice "em estado selvagem", mas todas são possíveis.

Outras dicas

Isso não está correto.É sempre melhor criar um caso de teste que represente seus dados e ver por si mesmo.Se você quiser realmente entender o Oracle SQL Optimizer procure por Jonathan Lewis, leia seus livros, leia seu blog, confira seu site, o cara é incrível e sempre gera casos de teste.

create table mytab nologging as (
select mod(rownum, 3) x, rownum  y, mod(rownum, 3) z from all_objects, (select 'x' from user_tables where rownum < 4)
);

create index i on mytab (x, y, z);

exec dbms_stats.gather_table_stats(ownname=>'DBADMIN',tabname=>'MYTAB', cascade=>true);

set autot trace exp

select * from mytab where y=5000;

Execution Plan
----------------------------------------------------------
   0      SELECT STATEMENT Optimizer=CHOOSE (Cost=1 Card=1 Bytes=10)
   1    0   INDEX (SKIP SCAN) OF 'I' (INDEX) (Cost=1 Card=1 Bytes=10)

Até a versão Oracle 8 um índice nunca será usado a menos que a primeira coluna seja incluída no SQL.

No Oracle 9i, o Ignorar acesso ao índice de digitalização foi introduzido um recurso que permite ao Oracle CBO tentar usar índices mesmo quando a coluna de prefixo não está disponível.

Boa visão geral de como o skip scan funciona aqui: http://www.quest-pipelines.com/newsletter-v5/1004_C.htm

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top