CODIGOHTML=<font color="00000" size="15">Crea un ndice sobre una tabla de base de datos.
La sintaxis bsica es:
CREATE {UNIQUE} INDEX nombre_ndice
ON tabla( columnas_indexadas )
{TABLESPACE tab_indices}
{STORAGE( INITIAL XX{K|M} NEXT XX{K|M} )}
La clusula UNIQUE acta como si los campos indexados fuesen clave primaria, es decir, no permite que el conjunto de campos indexados se repita en la tabla.
Ya dijimos que un ndice es como una tabla auxiliar que slo contiene ciertas columnas de bsqueda. Por eso tambin es posible (y recomendable) indicar tanto el tablespace como las clusula STORAGE para las caractersticas de almacenamiento de disco. Si no se incluyera, se utilizar el STORAGE indicado en la creacin del tablespace sobre el que se crea el ndice.
As mismo Oracle recomienda que los ndices residan en un tablespace separado al de las tablas. Esto es debido a la siguiente razn:
Dos tablespaces distintos estn soportados fsicamente por al menos un datafile cada uno.
Si nuestro servidor de base de datos tiene ms de un disco duro (algo muy normal), es posible crear un tablespace con sus datafiles en un disco y otro tablespace con los datafiles en otro disco.
Esto permite que se puedan hacer lecturas de disco simultneamente sobre dos disco fsicos, ya que cada disco tiene su propio bus de datos.
Al meter los ndices en un disco fsico y los datos en otro, se facilita que se puedan hacer lecturas simultneas.
Este proceso (de poner los ndices y datos en discos separados), se denomina balanceado.
Oracle crea automticamente un ndice cuando se define la clave primaria. Esto es porque la condicin ms habitual en una consulta a cualquier tabla es por los campos de su clave primaria. De esta forma se aceleran la gran mayora de las consultas (recordar que un ndice acta del mismo modo que el de un libro).
Pero pueden darse casos en los que se hagan gran cantidad de consultas por campos distintos a los de la clave primaria. En este caso es necesario crear un ndice por los campos por lo que se accede.
Por ejemplo, puede ser que en nuestra tabla FACTURA sea muy comn recuperar aquellas facturas de un cierto cliente.
En este caso la consulta SELECT ha realizar sera la siguiente:
SELECT *
FROM FACTURA
WHERE C_PAIS = 1 AND
C_CLIENTE = A111;
En este caso se est accediendo la tabla FACTURA por campos distintos a la clave primaria (que es Referencia). Si este tipo de consultas son muy habituales es necesario crear un ndice por estos campos:
CREATE INDEX ind_factura_cliente
ON FACTURA( C_PAIS, C_CLIENTE )
TABLESPACE tab_factura_ind
STORAGE( INITIAL 500K NEXT 500K );
No podemos poner la clusula UNIQUE porque si no, no podramos insertar ms de una factura por cliente.</font>