Bases
Un índice es una estructura de disco asociada con una tabla o una vista que acelera la recuperación de filas de la tabla o de la vista. Un índice contiene claves generadas a partir de una o varias columnas de la tabla o la vista. Dichas claves están almacenadas en una estructura (árbol b) que permite buscar de forma rápida y eficiente la fila o filas asociadas a los valores de cadaclave. (1)
Un índice es como una tabla auxiliar que sólo contiene ciertas columnas de búsqueda. Por eso también es posible (y recomendable) indicar el tablespace en el cual se almacenará.
Oracle recomienda que los índices residan en un tablespace y datafile separado al de las tablas ya que dos tablespaces distintos pueden están almacenados físicamente por, al menos, un datafile cada uno. Sinuestro servidor de base de datos tiene más 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 simultáneamente sobre dos disco físicos, ya que cada disco tiene su propio bus de datos. Al crear los índices en un disco físico y los datos en otro, se facilitaque se puedan hacer lecturas simultaneas.
Este proceso (de poner los índices y datos en discos separados), se denomina balanceado.
Oracle crea automáticamente un índice cuando se define la clave primaria. Esto es debido a que la condición más habitual en una consulta a cualquier tabla es a través de los campos de su clave primaria. De esta forma se aceleran la gran mayoría de las consultas(recordar que el índice de una tabla actúa 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.
Sintaxis
CREATE {UNIQUE} INDEX nombre_índice
ON tabla( columnas_indexadas )
{TABLESPACE tab_indices}
{STORAGE(INITIAL XX{K|M} NEXT XX{K|M} )}
La cláusula UNIQUE actúa como si los campos indexados fuesen clave primaria, es decir, no permite que el conjunto de campos indexados se repita en la tabla.
Por ejemplo, puede ser que en nuestra tabla FACTURA sea muy común recuperar aquellas
facturas de un cierto cliente.
En este caso la consulta SELECT ha realizar sería la siguiente:
SELECT *
FROM FACTURAWHERE 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 podemosponer la cláusula UNIQUE porque si no, no podríamos insertar más de una
factura por cliente.
Ventajas de los Índices
* Una de las mayores ventajas es que cuando un SGBD se encuentra un índice evitamos un “escaneo completo de la tabla” lo que hace que cuando tenemos grandes cantidades de datos en nuestras tablas, la mejora puede ser muy importante.
* Muy relacionado con el anterior, alevitar “escaneos completos de las tablas”, evitamos los siguientes problemas: Sobrecarga de CPU, sobrecarga de disco y concurrencia.
* Con los índices evitamos que un SGBD tenga que hacer lecturas secuenciales.
* Los índices nos permiten una mayor rapidez en la ejecución de las consultas tipo SELECT
* Será una ventaja para aquellos campos que no tengan datos duplicados, sin embargo si esun campo con valores que se repiten continuamente (Ej. Masculino/Femenino) no es aconsejable.
Desventajas de los Índices
Pero a pesar de sus grandes ventajas no debemos abusar de ellos puesto que en determinadas situaciones no supondrá una mejora:
* Los índices son una desventaja en aquellas tablas las que se utiliza frecuentemente operaciones de escritura (Insert, Delete, Update), esto...
Regístrate para leer el documento completo.