multiple - pivot oracle ejemplos
SQL/Oracle: cuando se pueden usar índices en múltiples columnas (3)
Si creo un índice en columnas (A, B, C), en ese orden, entiendo que la base de datos podrá usarlo incluso si solo busco en (A), o (A y B), o ( A y B y C), pero no si solo busco en (B), o (C), o (B y C). ¿Es esto correcto?
Eso no es correcto. Siempre es mejor idear un caso de prueba que represente sus datos y compruébelo usted mismo. Si realmente quiere entender el Oracle SQL Optimizer google Jonathan Lewis, leer sus libros, leer su blog, ver su sitio web, el tipo es increíble, y él siempre genera casos de prueba.
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)
En realidad, hay tres métodos de acceso basados en índices que Oracle puede usar cuando se coloca un predicado en una columna no líder de un índice.
i) Análisis de saltos de índice: http://download.oracle.com/docs/cd/B19306_01/server.102/b14211/optimops.htm#PFGRF10105
ii) Escaneo completo de índice completo: http://download.oracle.com/docs/cd/B19306_01/server.102/b14211/optimops.htm#i52044
iii) Análisis completo del índice: http://download.oracle.com/docs/cd/B19306_01/server.102/b14211/optimops.htm#i82107
A menudo he visto el escaneo de índice rápido completo "en la naturaleza", pero todos son posibles.
Hasta la versión Oracle 8 , nunca se usará un índice a menos que la primera columna esté incluida en el SQL.
En Oracle 9i se introdujo la función Omitir índice de exploración de exploración , lo que permite que Oracle CBO intente usar índices incluso cuando la columna de prefijo no esté disponible.
Una buena descripción de cómo funciona el escaneo de escaneo aquí: http://www.quest-pipelines.com/newsletter-v5/1004_C.htm