Índices basados en funciones en Oracle

Anuncio
Grandes volúmenes de
datos
Índices basados en funciones en Oracle
bases de datos
Índices basados en funciones en Oracle

¿Por qué son necesarias?
Si se aplica a un campo indexado alguna
función el optimizador puede decidir no
utilizar dicho índice.
Por ejemplo
… where upper(nombre) = ‘PEPE’
… where to_char(fnac,’mm/yyyy’) =‘02/2010’
No usarán los índices aunque existan
2
Índices basados en funciones en Oracle
Se pueden crear índices basados en
 funciones aritméticas


◦
Create index I3 on alumnos (importe+100)
◦
◦
Create index I1 on alumnos (to_char(feha_nac,’dd/mm/yyyy’))
Create index I2 on alumnos (upper(apellidos))
◦
Create index I4 on alumnos (dameMes(fecha_nac))
funciones predefinidas
funciones de usuario
Se pueden crear en indices compuestos
o
Create index I5 on alumnos (upper(apellidos) , dameMes(fecha_nac))
3
Índices basados en funciones en Oracle

Restricciónes
◦ En el caso de funciones definidas por el usuario deben ser
DETERMINISTIC, esto es, debe generar siempre el mismo
resultado para una misma entrada (por ejemplo no se puede
crear un índice por el numero de asignaturas matriculadas de un
estudiante)
◦ No es compatible con columnas LOBs.
◦ Las funciones PL/SQL solo deben hacer referencia a columnas de
la fila que se esta indexando.
◦ No son usados si se unen predicados con OR.
◦ La función ha de ser siempre la misma para que se use el índice
Create index I3 on alumnos (importe+100)
Select * from alumnos where importe+100 > 200 (usa índice)
Select * from alumnos where importe+150 > 250 (NO usa índice)
4
Índices basados en funciones en Oracle
 Sintaxis
CREATE INDEX [ esquema.]indice ON
[esquema.]tabla (column_expression,
column_expression, …) ;
DROP INDEX [ esquema.]indice;
5
Índices basados en funciones en Oracle

column_expression
◦ Expecifica una expresión construida de
columnas de una tabla, constantes,
funciones SQL y funciones definidas por el
usuario
6
Índices basados en funciones en Oracle

Ejemplos
◦ create index fidx_pedidos_fech_pedi on
pedidos (fech_pedi+5);
◦ create index fidx_empresas_cif_empr on
empresas (substr(cif_empr,1,1) );
◦ create index fidx_empresas_nac_empr on
empresas (EsNacional(nomb_empr) );
7
Descargar