Ir al contenido principal

CREANDO y UTILIZANDO INDICES.

Los índices son creados implícitamente cuando Constraints Primary Key y unique son definidos. Si un índice sobre la columna relevante no existe. La sintaxis básica para crear un índice explícitamente es.

CREATE [UNIQUE | BITMAP] INDEX [ schema.]indexname
ON [schema.]tablename (column [, column...] ) ;

El tipo por defecto de un índice es un non-unique, non-compressed, non-reverse key, índice B*TREE.  No es posible crear un índice Bitmap Unique (y usted no le gustaría si pudiera-pensar la cuestión de cardinalidad). Los índices son objetos de esquema, y es posible crear un índice en un esquema sobre una tabla que está en otro esquema. Pero la mayoría de las personas encontrara esto como confuso. Un índice Composite es un índice sobre varias columnas. Índices Composite puede ser sobre columnas de diferentes tipos, y las columnas no tienes que ser adyacentes en la tabla.

EN EL TRABAJO
Muchos administradores de bases de datos no consideran buena práctica confiarse sobre la creación implícita de índices. Si el índice es creado explícitamente, el creador tiene control completo sobre las características del índice, que puede ser más fácil para el DBA su gestión posterior.

Considera este ejemplo de creación de tabla e índices, y luego la definición de Constraints:

create table dept(deptno number,dname varchar2(10));
create table emp(empno number, surname varchar2(10),
forename varchar2(10), dob date, deptno number);
create unique index dept_i1 on dept(deptno);
create unique index emp_i1 on emp(empno);
create index emp_i2 on emp(surname,forename);
create bitmap index emp_i3 on emp(deptno);
alter table dept add constraint dept_pk primary key (deptno);
alter table emp add constraint emp_pk primary key (empno);
alter table emp add constraint emp_fk
foreign key (deptno) references dept(deptno);

Los primeros índices creados están marcados como UNIQUE, esto significa que no será posible insertar valores duplicados. Esto no es definido como un Constraint en este punto pero es cierto, sin embargo. El tercer índice no está definió como UNIQUE y por lo tanto, aceptar valores duplicados; este es un índice Composite sobre dos columnas. El cuarto índice es definido como un Índice Bitmap, porque la cardinalidad de la columna es probable que sea baja en proporción a el numero de filas en la tabla.
Cuando los dos primero Constraints Primary Key son definidos,  Oracle detectara los índices pre creados y los utilizaran para hacer cumplir las restricciones. Tenga en cuenta que el índice sobre DEPT.DEPTNO no tiene propósito para rendimiento porque la tabla con toda probabilidad  sea tan pequeño que el índice nunca será utilizado para recuperar filas (una exploración será más rápida), pero es todavía esencial tener un índice para hacer cumplir el Constraints Primary key. 
Una vez que se crean, el uso de índice es completamente transparente y automático. Antes de ejecutar una declaración SQL, el servidor Oracle evaluara  todas las formas posibles de ejecutarlo. Algunas de estas formas pueden implicar el uso cualquiera que sea  índices que están disponibles; otros no pueden. Oracle hará uso de la información recolectada sobre las tablas y el entorno para tomar la decisión acerca  de los índices a usar.

EN EL TRABAJO
El servidor Oracle debe hacer la mejor decisión acerca del uso de índices, pero si está obteniendo errores, es posible para un programador embeber instrucciones, conocido como sugerencias de optimizador, en el código que obligara a utilizar  de ciertos índices.

MODIFICANDO Y ELIMINADO INDICES.
Hay un comando ALTER INDEX…,  pero no puede ser utilizados para cambiar cualquier de las características descritas en este capítulo: el Tipo (B*TREE o Bitmap) de índice, las columnas, o si es unique o non-unique. El comando ALTER INDEX se encuentra (miente)  en el dominio de la administración de la Base de datos y por lo general se utiliza para ajustar las propiedades físicas del índice, no las propiedades lógicas que son de interés para los desarrolladores. Si es necesario cambiar alguna de estas propiedades, el índice debe ser eliminado y crearlo nuevamente.  Continuando con el ejemplo en el sección anterior, para cambiar el índice EMP_12 para incluir los cumpleaños de los empleados, 

drop index emp_i2;
create index emp_i2 on emp(surname,forename,dob);

Este Índice Composite (compuesto)  ahora incluye columnas con diferentes tipos de datos. Las columnas pasaran a ser enumeradas en el mismo orden que son definidas en la tabla, pero esto es de ninguna manera necesaria.
Cuando una tabla es eliminada, todos los índices y Constraints  definidos para la tabla se eliminan también. Si un índice  fue creado implícitamente mediante la creación de un Constraints, entonces Eliminar el Constraints también eliminara el índice. Si el índice se había creado explícitamente y el Constraint creado posteriormente, entonces si el Constraint fuera eliminado el índice sobrevivirá. 

EJERCICIO 9-3
CREAR INDICES.
En este ejercicio, agregara algunos índices a la tabla EX_EMPS, y modificar el índice creado cuando el Constraints Primary Key fue agregado.

1. Conectarse a su base de datos con SQL*PLUS como usuario HR.
2. Determine el nombre y algunas otras características del Índice Primary Key ejecutando esta cosulta:
select index_name,column_name,index_type,uniqueness
from user_indexes natural join user_ind_columns
where table_name='EX_EMPS';
3. Crear un indice compuesto B*TREE sobre el nombre de empleados:
create index ex_name_i on ex_emps (last_name,first_name);
4. Crear indices Bitmap en algunas columnas de baja cardinalidad:
create bitmap index ex_dept_i on ex_emps(department_id);
create bitmap index ex_mgr_i on ex_emps (manager_id);
5. Con el Database Control, mire los índices. La ruta de navegación desde la pagina principal del Database Control tome la ficha Esquema, y entonces dar clic en el link Índices sobre la sección Database Objects.  Ingresar HR como el nombre del esquema y EX_EMPS como el nombre del objeto, y dar clic en Go. Los índices serán (cuatro, incluyendo los índices Primary Key creados automáticamente) mostrados.

Comentarios