Está en la página 1de 22

ORACLE

Proyecto Final
ndex(Tipo-Definicin-Ejemplos)
Lisseth Funes Tasayco Lissette Hamacto Vargas 03/08/2012

Definicin de ndex en Oracle

NDEX
1. DEFINICIN
Los ndices se usan para mejorar el rendimiento de las operaciones sobre una tabla. Un ndice es una estructura de memoria secundaria que permite el acceso directo a las filas de una tabla (est o no agrupada). Aumenta la velocidad de respuesta de la consulta, mejorando su rendimiento y optimizando su resultado. Su manejo se hace de forma inteligente. Es el propio Oracle quien decide qu ndice se necesita.

El ndice de una base de datos es una estructura de datos que mejora la velocidad de las operaciones, permitiendo un rpido acceso a los registros de una tabla. Al aumentar drsticamente la velocidad de acceso, se suelen usar sobre aquellos campos sobre los cuales se vayan a realizar bsquedas frecuentes. El ndice tiene un funcionamiento similar al ndice de un libro, guardando parejas de elementos: el elemento que se desea indexar y su posicin en la base de datos. Para buscar un elemento que est indexado, slo hay que buscar en el ndice de dicho elemento para, una vez encontrado, devolver el registro que se encuentre en la posicin marcada por el ndice. Los ndices pueden ser creados usando una o ms columnas, preparando la base de datos tanto para bsquedas rpidas al azar como para ordenaciones eficientes de los registros. Los ndices son construidos sobre rboles B, B+, B* o sobre una mezcla de ellos, funciones de clculo u otros mtodos. El espacio en disco requerido para almacenar el ndice es tpicamente menor que el espacio de almacenamiento de la tabla (puesto que los ndices generalmente contienen solamente los campos clave de acuerdo con los que la tabla ser ordenada, y excluyen el resto de los detalles de la tabla), lo que da la posibilidad de almacenar en memoria los ndices de tablas que no cabran en ella. En una base de datos relacional un ndice es una copia de parte de una tabla. Crear un ndice en una tabla ya existente en Oracle La creacin de un ndice en Oracle se realiza mediante el comando create index. Cuando se define una clave primaria o una columna unvoca (UNIQUE) durante la creacin de una tabla o su mantenimiento, Oracle crear automticamente un ndice de tipo UNIQUE que gestione dicha restriccin, como hemos indicado anteriormente. La sintaxis completa de create index es la siguiente:

create [bitmap | unique] index nombre_indice on nombre_tabla (nombre_columna [, nombre_columna2] ...) [reverse];
CREATE [UNIQUE] INDEX index_name ON nombre_tabla (Columna1, Columna2, column_n.) [ESTADSTICAS COMPUTE];

bitmap indica que se cree un ndice de mapa de bits que permite crear ndices en columnas con muy pocos valores diferentes. unique indica que el valor de la o las columnas indexadas debe ser nico, no puede haber duplicidades. nombre_indice debe ser un nombre unvoco (no debe existir otro nombre de objeto en Oracle) que siga los convenios de denominacin de Oracle para nombrar columnas. nombre_tabla ser el nombre de la tabla donde se crear el ndice. nombre_columna (o columnas) ser la columna de la tabla nombre_tabla en la que se crear el ndice. Se puede crear un ndice para varias columnas. reverse indica a Oracle que invierta los bytes del valor indexado, lo que puede mejorar la distribucin del procesamiento y de los datos cuando se insertan muchos valores de datos secuenciales. ESTADSTICA COMPUTE dice a Oracle para recopilar estadsticas durante la creacin del ndice. Las estadsticas son utilizados por el optimizador elija un "plan de ejecucin" cuando las sentencias SQL se ejecutan.

Por Ejemplo: En este ejemplo, hemos creado un ndice en la tabla de proveedores llamado supplier_idx. Se compone de dos campos - el campo supplier_name y ciudad
CREATE INDEX supplier_idx DE proveedor (supplier_name, ciudad) ESTADSTICAS DE CMPUTO;

En Oracle existen tres tipos de ndices: Lectura/Escritura B-tree (rboles binarios) Function Based Reserve key Slo lectura (read only) Bitmap Bitmap join Index-organized table (algunas veces usados en lectura/escritura) Cluster y hash cluster Domain (muy especficos en aplicaciones Oracle) 2

2. REGLAS EN EL DISEO DE NDICES


Indexe solamente las tablas cuando las consultas no accedan a una gran cantidad de filas de la tabla. No indexe tablas que son actualizadas con mucha frecuencia. Indexe aquellas tablas que no tengan muchos valores repetidos en las columnas escogidas. Las consultas muy complejas (en la clusula WHERE) por lo general no toman mucha ventaja de los ndices.

3. CREAR NDICES(Create ndex)


3.1 Crear un ndice explcitamente
Puede crear ndices de forma explcita (fuera de las restricciones de integridad) utilizando la sentencia SQL CREATE INDEX. La siguiente sentencia crea un ndice llamado emp_ename para la Ename columna de la emp tabla:
CREATE INDEX emp_ename ON emp(ename) TABLESPACE users STORAGE (INITIAL 20K NEXT 20k PCTINCREASE 75);

Observe que la configuracin de varios almacenes y un espacio de tabla se especifican explcitamente para el ndice. Si no se especifican opciones de almacenamiento (como INITIAL y NEXT ) para un ndice, las opciones de almacenamiento por defecto del defecto o espacio de tabla especificado se utiliza automticamente.

3.2 La creacin de un ndice nico de forma explcita


Los ndices pueden ser nicos o no nicos. Los ndices nicos garantizan que no hay dos filas de una tabla tienen valores duplicados en la columna de clave (o columnas). ndices no nicos no imponen esta restriccin en los valores de columna. Utilice el CREATE UNIQUE INDEX instruccin para crear un ndice nico.
CREATE UNIQUE INDEX dept_unique_index ON dept (dname) TABLESPACE indx;

Como alternativa, puede definir UNIQUE restricciones de integridad en las columnas deseadas. La base de datos exige UNIQUE restricciones de integridad de forma automtica la definicin de un ndice nico en la clave nica. Esto se discute en la siguiente seccin. Sin embargo, es aconsejable que cualquier ndice que existe para el rendimiento de consulta, incluyendo ndices nicos, ser creado explcitamente. 3

3.3 Creacin de un ndice asociado a una restriccin


Oracle Database impone un NICO clave o PRIMARY KEY restriccin de integridad en una tabla junto a la creacin de un ndice nico en la clave nica o clave primaria. Este ndice se crea automticamente la base de datos cuando la restriccin est habilitada. Ninguna accin es requerida por usted cuando se emite la sentencia CREATE TABLE o ALTER TABLE instruccin para crear el ndice, pero si lo desea, puede especificar un ndice con clusula de ejercer control sobre su creacin. Esto incluye tanto una restriccin cuando se define y se habilita, y cuando una restriccin definida pero deshabilitado est habilitado.

3.3.1 Especificacin de las opciones de almacenamiento para un ndice asociado a una restriccin
Puede configurar las opciones de almacenamiento para los ndices asociados con UNIQUE y PRIMARY KEY restricciones utilizando el ndice mediante clusula. El siguiente CREATE TABLE declaracin permite una PRIMARY KEY restriccin y especifica las opciones de almacenamiento de los ndices asociados:
CREATE TABLE emp ( empno NUMBER(5) PRIMARY KEY, age INTEGER) ENABLE PRIMARY KEY USING INDEX TABLESPACE users;

3.3.2 Especificacin del ndice asociado a una restriccin


Si usted requiere un control ms explcito sobre los ndices asociados con UNIQUE y PRIMARY KEY limitaciones, la base de datos le permite:

Especifica un ndice existente de que la base de datos se va a utilizar para hacer cumplir la restriccin Especifique un CREATE INDEX declaracin de que la base de datos se va a utilizar para crear el ndice y hacer cumplir la restriccin

Estas opciones se especifican mediante la clusula USING INDEX . Ejemplo 1:


CREATE TABLE a ( a1 INT PRIMARY KEY USING INDEX (create index ai on a (a1)));

Ejemplo 2:
CREATE TABLE b( b1 INT, b2 INT, CONSTRAINT bu1 UNIQUE (b1, b2) USING INDEX (create unique index bi on b(b1, b2)), CONSTRAINT bu2 UNIQUE (b2, b1) USING INDEX bi);

Ejemplo 3:
CREATE TABLE c(c1 INT, c2 INT); CREATE INDEX ci ON c (c1, c2); ALTER TABLE c ADD CONSTRAINT cpk PRIMARY KEY (c1) USING INDEX ci;

Si una sola sentencia crea un ndice con una restriccin y tambin utiliza este ndice para otra restriccin, el sistema intentar reorganizar las clusulas para crear el ndice antes de volver a usarlo.

3.4 Recopilacin de estadsticas en el fondo al crear un ndice


Base de Datos Oracle le ofrece la oportunidad de recopilar estadsticas a un costo recurso muy poco durante la creacin o reconstruccin de un ndice. Estas estadsticas se almacenan en el diccionario de datos para su uso continuo por el optimizador en la eleccin de un plan para la ejecucin de sentencias SQL. La declaracin siguiente calcula el ndice, la tabla y la estadstica de la columna construyendo el ndice emp_ename en la columna ename de la tabla emp:
CREATE INDEX emp_ename ON emp(ename) COMPUTE STATISTICS;

3.5 Creacin de un ndice grande


Al crear un ndice extremadamente grande, considerar la asignacin de un espacio de tabla temporal mayor para la creacin de ndices usando el siguiente procedimiento: 1. Crear un nuevo espacio de tabla temporal utilizando el CREATE TABLESPACE o CREATE TEMPORARY TABLESPACE declaracion. 2. Utilice el espacio de TEMPORARY TABLESPACE de la opcin ALTER USER declaracin para convertirlo en el nuevo espacio de tablas temporal. 3. Cree el ndice mediante el CREATE INDEX declaracion. 4. Deja este espacio de tablas utilizando el DROP TABLESPACE comunicado. A continuacin, utilice el ALTER USER declaracin para restablecer el espacio de tablas temporal a su espacio de tablas temporal original. El uso de este procedimiento puede evitar el problema de la expansin de su costumbre, y por lo general compartido, tablespace temporal a un tamao excesivamente grande que puede afectar al rendimiento futuro.

3.6 La creacin de un Index Online


Puede crear y volver a generar ndices en lnea. Esto le permite actualizar las tablas base, al mismo tiempo que usted est construyendo o reconstruyendo los ndices de esa tabla. Puede realizar operaciones DML, mientras que el ndice de construccin se lleva a cabo, pero las operaciones de DDL no estn permitidos. La ejecucin paralela no se admite al crear o volver a generar un ndice en lnea. 5

Las siguientes declaraciones ilustran las operaciones de ndice en lnea de compilacin:


CREATE INDEX emp_name ON emp (mgr, emp1, emp2, emp3) ONLINE;

3.7 Creacin de un ndice basado en funciones


Funcin de base de ndices de facilitar las consultas que califican a un valor devuelto por una funcin o expresin. El valor de la funcin o expresin se calcula previamente y almacena en el ndice. Adems de los requisitos previos para crear un ndice convencional, si el ndice est basado en funciones definidas por el usuario, entonces esas funciones deben estar marcados DETERMINISTIC . Tambin, usted apenas tiene el EXECUTE privilegio de objeto en cualquier funcin definida por el usuario (s) que se utiliza en el ndice basado en las funciones si dichas funciones son propiedad de otro usuario. Adems, para utilizar un ndice basado en las funciones:

La tabla debe ser analizado despus se crea el ndice. La consulta debe ser garantizado para no necesitar ningn NULL los valores de la expresin indexada, ya que NULL valores no se almacenan en los ndices.

Ejemplo 1: Para ilustrar un ndice basado en la funcin, considere la declaracin siguiente que define un ndice basado en la funcin (area_index) definido en el rea de funcin (geo):
CREATE INDEX area_index ON rivers (area(geo));

En la siguiente sentencia SQL, cuando area (geo) se hace referencia en el DONDE clusula, el optimizador considera que mediante el ndice de area_index .
SELECT id, geo, area(geo), desc FROM rivers WHERE Area(geo) >5000;

Propietarios tabla debe tener EXECUTE privilegios en las funciones utilizadas en los ndices basados en funciones. Debido a que un ndice basado en funciones depende de cualquier funcin que est utilizando, puede ser invalidada cuando cambia de funcin. Si la funcin es vlida, puede utilizar un ALTER INDEX...ENABLE declaracin para que un ndice basado en las funciones que se ha desactivado. El ALTER INDEX...DISABLE permite deshabilitar declaracin el uso de un ndice basado en las funciones. Considere la posibilidad de hacer esto si usted est trabajando en el cuerpo de la funcin.

Ejemplo 2:

CREATE [UNIQUE] INDEX index_name ON table_name (function1, function2, . function_n) [ COMPUTE STATISTICS ]; CREATE INDEX supplier_idx ON supplier (UPPER(supplier_name));

En este ejemplo, hemos creado un ndice basado en la evaluacin de la mayscula supplier_name campo. Sin embargo, para estar seguro de que el optimizador de Oracle utiliza este ndice al ejecutar las sentencias SQL, asegrese de que SUPERIOR (supplier_name) no se evala como un valor NULL. Para asegurar esto, aadir SUPERIOR (supplier_name) IS NOT NULL a la clusula WHERE de la siguiente manera:
SELECT supplier_id, supplier_name, UPPER(supplier_name) FROM supplier WHERE UPPER(supplier_name) IS NOT NULL ORDER BY UPPER(supplier_name);

3.8 Creacin de un ndice de clave-comprimido


Creacin de un ndice mediante compresin tecla le permite eliminar las ocurrencias repetidas de los principales valores de la columna de prefijo. Compresin Key rompe una clave de ndice en un prefijo y un sufijo entrada. La compresin se consigue mediante el intercambio de las entradas de prefijo entre todas las entradas de sufijos en un bloque de ndice. Este intercambio puede llevar a un gran ahorro en el espacio, lo que le permite almacenar ms claves para cada bloque ndice al tiempo que mejora el rendimiento. Compresin de clave puede ser til en las situaciones siguientes:

Usted tiene un ndice no nico en el ROWID se aade para hacer la llave nica. Si utiliza compresin clave aqu, el duplicado de la llave se almacena como una entrada de prefijo en el bloque de ndice sin el ROWID . Las filas restantes convertido entradas sufijo que consiste en slo el ROWID . Usted tiene un nico ndice de varias columnas.

Para habilitar la compresin de claves mediante la COMPRESS clusula. La longitud del prefijo (como el nmero de columnas de la clave) tambin se pueden especificar para identificar cmo las columnas de clave se divide en un prefijo y un sufijo de entrada. Por ejemplo, la siguiente sentencia comprime ocurrencias duplicadas de una llave en el bloque de la hoja de ndice:
CREATE INDEX emp_ename ON emp(ename) TABLESPACE users COMPRESS 1;

El COMPRESS clusula tambin se puede especificar durante la reconstruccin. Por ejemplo, durante la reconstruccin puede deshabilitar la compresin de la siguiente manera:
ALTER INDEX emp_ename REBUILD NOCOMPRESS;

3.9 Crear un ndice Invisible


A partir de la versin 11 g , puede crear ndices invisibles. Un ndice invisible es un ndice que es ignorado por el optimizador menos que establezca explcitamente la OPTIMIZER_USE_INVISIBLE_INDEXES parmetro de inicializacin al VERDADERO en la sesin o nivel del sistema. Cmo hacer una invisible ndice es una alternativa a lo que es inutilizable o se caiga. El uso de ndices invisibles, puede hacer lo siguiente:

Pruebe la eliminacin de un ndice antes de que se caiga. Usar estructuras temporales de ndice para ciertas operaciones o mdulos de la aplicacin, sin perjuicio de la aplicacin general.

A diferencia de los ndices inutilizables, un ndice invisible se mantiene durante DML. Para crear un ndice invisible, utilice la sentencia SQL CREATE INDEX con la INVISIBLE clusula. La siguiente sentencia crea un ndice invisible llamado emp_ename para la Ename columna de la emp tabla:
CREATE INDEX emp_ename ON emp(ename) TABLESPACE users STORAGE (INITIAL 20K NEXT 20k PCTINCREASE 75) INVISIBLE;

4. ALTER INDEX (ndices de Alteracin)


Para modificar un ndice, el esquema debe contener el ndice o debe tener el permiso ALTER ANY INDICE privilegio del sistema. Con la instruccin ALTER INDEX declaracin, puede:

Reconstruir o fusionarse un ndice existente Desasignar espacio no utilizado o asignar una nueva extensin Especificar la ejecucin en paralelo (o no) y alterar el grado de paralelismo Alterar los parmetros de almacenamiento o atributos fsicos Especifique LOGGING o NOLOGGING Activar o desactivar la compresin clave Marque el ndice inutilizable Hacer invisible el ndice Cambie el nombre del ndice Iniciar o detener la monitorizacin de uso del ndice

No se puede alterar la estructura de ndice de columna.

4.1 La alteracin de las caractersticas de almacenamiento de un ndice


Modificar los parmetros de almacenamiento de cualquier ndice, incluidos los creados por la base de datos para hacer cumplir las restricciones de clave primaria y nica de integridad, mediante la instruccin ALTER INDEX comunicado. Por ejemplo, la siguiente sentencia modifica la emp_ename ndice:
ALTER INDEX emp_ename STORAGE (PCTINCREASE 50);

Los parmetros de almacenamiento INITIAL y MINEXTENTS no pueden ser alterados. Todos los nuevos valores para los parmetros de almacenamiento de este medicamento slo afectan a extensiones posteriormente asignados para el ndice. Para los ndices que implementan restricciones de integridad, puede ajustar los parmetros de almacenamiento mediante la emisin de una sentencia ALTER TABLE declaracin que incluya USING INDEX subclusula del ENABLE . Por ejemplo, la instruccin siguiente cambia las opciones de almacenamiento del ndice creado en la tabla emp de hacer cumplir la restriccin de clave primaria:
ALTER TABLE emp ENABLE PRIMARY KEY USING INDEX;

4.2 La reconstruccin de un ndice existente Al volver a generar un ndice, se utiliza un ndice existente como origen de datos. Creacin de un ndice de esta manera le permite cambiar las caractersticas de almacenamiento o trasladarse a un nuevo tablespace. La reconstruccin de un ndice basado en un origen de datos existente elimina 9

intra-bloque de fragmentacin. En comparacin con el ndice cayendo y utilizar el CREATE INDEX declaracin, volver a crear un ndice existente ofrece un mejor rendimiento. La siguiente afirmacin se vuelve a generar el ndice existente emp_name :
ALTER INDEX emp_name REBUILD;

El REBUILD clusula debe seguir inmediatamente al nombre del ndice y preceder a cualquier otra opcin. No se puede utilizar en conjuncin con la DEALLOCATE UNUSED clusula. Usted tiene la opcin de reconstruir el ndice en lnea. Reconstruccin en lnea le permite actualizar las tablas base, al mismo tiempo que va a reconstruir. La siguiente afirmacin se vuelve a generar el emp_name ndice en lnea:
ALTER INDEX emp_name REBUILD ONLINE;

4.3 Construyendo un ndice Invisible


Para hacer un ndice visible o invisible, emita esta sentencia:
ALTER INDEX index INVISIBLE ALTER INDEX index VISIBLE;

Para saber si un ndice es visible o invisible, la consulta del diccionario views USER_INDEXES , ALL_INDEXES o DBA_INDEXES . Por ejemplo, para determinar si el ndice de IND1 es invisible, emita la consulta siguiente:
SELECT INDEX_NAME, VISIBILITY FROM USER_INDEXES WHERE INDEX_NAME = 'IND1'; INDEX_NAME ---------IND1 VISIBILITY ---------VISIBLE

4.4 Renombrar un ndice


Para cambiar el nombre de un ndice, utilice este comando:
ALTER INDEX index_name RENAME TO nombre_nuevo ;

4.5 Supervisar el uso de ndice (MONITORING)


Base de datos Oracle proporciona un medio de ndices de control para determinar si se estn utilizando. Si un ndice no se est utilizando, entonces se puede quitar, eliminar sobrecarga innecesaria declaracin.

10

Para empezar a monitorizar el uso de un ndice, utilice este comando:


ALTER INDEX index MONITORING USAGE;

Ms tarde, emita la sentencia siguiente para detener el monitoreo:


ALTER INDEX index NOMONITORING USAGE;

La vista V$OBJECT_USAGE puede consultarse para obtener el ndice siendo monitoreado para ver si el ndice se ha utilizado. La vista contiene un USED columna cuyo valor es YES o NO, dependiendo de si el ndice se ha utilizado dentro del perodo de tiempo se est supervisando. La vista tambin contiene el inicio y fin del perodo de seguimiento, y un MONITORING columna (YES/NO) para indicar si la supervisin uso est actualmente activo. Cada vez que usted especifique MONITORING USAGE de V$OBJECT_USAGEvista se restablece en el ndice especificado. La informacin de uso anterior se borra o se reinicia, y una nueva hora de inicio se registra. Cuando se especifica NOMONITORING USAGE, ningn seguimiento posterior se realiza, y el tiempo final se registra para el perodo de seguimiento. Hasta el prximo ALTER INDEX...MONITORING USAGE de la declaracin es emitida, la informacin de la vista se deja sin cambios.

5. SEGUIMIENTO DEL USO DE ESPACIO DE INDICES(Monitoring)


Si los valores de clave de un ndice se insertan, actualizan y eliminan con frecuencia, el ndice puede perder su espacio adquirido de manera eficiente con el tiempo. Controlar la eficiencia de uso del espacio ndice a intervalos regulares, en primer lugar el anlisis de la estructura del ndice, utilizando el ANALYZE INDEX...VALIDATE STRUCTURE declaracin, y luego consultar la INDEX_STATS vista:
SELECT PCT_USED FROM INDEX_STATS WHERE NAME = 'index';

El porcentaje de uso de espacio de ndice vara en funcin de la frecuencia con claves de ndice se insertan, actualizan o eliminan. Desarrollar un historial de eficiencia media de uso de espacio para un ndice mediante la realizacin de la siguiente secuencia de operaciones varias veces:

Analizando las estadsticas Validacin del ndice Comprobacin PCT_USED Quitar y volver (o coalescencia) el ndice

Cuando usted encuentra que el uso del ndice espacial cae por debajo de su promedio, se puede condensar el espacio de ndice cayendo el ndice y volver a generarlo, o coalescencia ella.

11

6. DROPPING INDEXES
Para quitar un ndice, el ndice debe estar contenida en el esquema, o debe tener DROP ANY INDEX privilegio del sistema. Algunas razones para abandonar un ndice incluyen:

El ndice ya no es necesario. El ndice no est proporcionando mejoras previstas de rendimiento para las consultas emitidas contra la tabla asociada. Por ejemplo, la tabla puede ser muy pequeo, o puede haber muchas filas de la tabla, pero muy pocas entradas de ndice. Las aplicaciones no utilizar el ndice para consultar los datos. El ndice ha de ser vlidas y deben ser dejados antes de ser reconstruida. El ndice ha vuelto demasiado fragmentada y debe quitarse antes de ser reconstruida.

Al colocar un ndice, todas las extensiones del ndice segmento se devuelven al espacio de tablas que contiene y que se disponga de otros objetos en el espacio de tablas. Cmo quitar un ndice depende de si se ha creado el ndice explcitamente con una CREATE INDEX declaracin o implcitamente mediante la definicin de una restriccin de clave en una mesa. Si ha creado el ndice explcitamente con el CREATE INDEX declaracin, entonces usted puede quitar el ndice con el DROP INDEX declaracin. La declaracin siguiente se quita el emp_ename ndice:
DROP INDEX emp_ename;

No se puede quitar slo el ndice asociado a una habilitado UNIQUE clave o PRIMARY KEY restriccin. Para excluir a un ndice de restricciones asociadas, debe desactivar o eliminar la propia limitacin.

12

7. SINTAXIS
7.1 CREACIN
Bsica CREATE INDEX nombre_indice ON [esquema.] nombre_tabla (columna1 [, columna2, ...])

UNIQUE garantizan que en una tabla (o cluster) no puedan existir dos filas con el mismo valor. Table Index:

CREATE [UNIQUE|BITMAP] INDEX [esquema.]index_name ON [esquema.]table_name [tbl_alias] (col [ASC | DESC]) index_clause index_attribs

Bitmap Join Index:

13

CREATE [UNIQUE|BITMAP] INDEX [esquema.]index_name ON [esquema.]table_name [tbl_alias] (col_expression [ASC | DESC]) FROM [esquema.]table_name [tbl_alias] WHERE condition [index_clause] index_attribs

Cluster Index:

CREATE [UNIQUE|BITMAP] INDEX [esquema.]index_name ON CLUSTER [esquema.]cluster_name index_attribs

7.2 MODIFICACIN
Bsica ALTER INDEX [schema.]index options

14

Cambiar el nombre de un ndice


ALTER INDEX index_name RENAME TO new_index_name; ALTER INDEX supplier_idx RENAME TO supplier_index_name;

7.3 ELIMINACIN
Bsica DROP INDEX [schema.]index [FORCE]

(FORCE slo se aplica a los ndices de dominio.)


Por Ejemplo: DROP INDEX supplier_idx;

8. ACERCA DE LOS NDICES


Los ndices son estructuras opcionales asociadas con tablas y grupos que permiten consultas SQL para ejecutar ms rpidamente contra una mesa. Al igual que el ndice de este manual le ayuda a localizar informacin ms rpido que si no existiera el ndice, un ndice de base de datos Oracle proporciona una ruta de acceso ms rpido a los datos de la tabla. Usted puede utilizar ndices sin tener que reescribir cualquier pregunta. Los resultados son los mismos, pero los ves con mayor rapidez. Base de datos Oracle ofrece varios esquemas de indexacin que proporcionan funcionalidad de actuacin complementaria. Estos son:

ndices B-tree: el valor por defecto y el ms comn ndices B-tree cluster: definidas especficamente para el grupo ndices hash cluster: definidas especficamente para un grupo de hash Los ndices globales y locales: se refieren a las tablas e ndices con particiones Reverse key indexes: muy til para Oracle Real Application Clusters aplicaciones ndices Bitmap: compacto, funciona mejor para las columnas con un pequeo conjunto de valores Basado en las funciones ndices: contiene el valor calculado previamente de una funcin / expresin ndices de dominio: especficas para una aplicacin o un cartucho.

Los ndices son lgica y fsicamente independiente de los datos en la tabla asociada. Al ser estructuras independientes, quienes requieren un espacio de almacenamiento. Puede crear o 15

quitar un ndice sin afectar a las tablas base, aplicaciones de bases de datos, u otros ndices. La base de datos mantiene ndices automticamente al insertar, actualizar y eliminar filas de la tabla asociada. Si se le cae un ndice, todas las aplicaciones siguen funcionando. Sin embargo, el acceso a los datos anteriormente indexados puede ser ms lento. 8.1 ESTRUCTURA: B*-TREE Se estructura como un rbol cuya raz contiene mltiples entradas y valores de claves que apuntan al siguiente nivel del rbol. Nivel 0. tablas pequeas de datos estticos. Nivel 1. Indexa tablas dinmicas con el valor nico de los identificadores de columna. Nivel 2. Indexa largas tablas o con poca cardinalidad.

8.2 ESTRUCTURA: BITMAP

Son efectivos para columnas simples con poca cardinalidad, esto es muchos valores distintos. Ms rpidos que los B*-Tree en entornos de read-only. Almacenan valores de 0 1 en el ROWID. Ejemplo: create bitmap index person_region on person (region);

16

9. DIRECTRICES PARA LA GESTIN DE LOS NDICES

9.1 Crear ndices despus de insertar datos de tabla


Los datos se suelen insertar o cargar en una tabla utilizando el SQL * Loader o una utilidad de importacin. Es ms eficaz para crear un ndice para una tabla despus de insertar o cargar los datos. Si se crea uno o ms ndices antes de carga de datos, la base de datos debe actualizar todos los ndices, ya que cada fila se inserta. La creacin de un ndice en una tabla que ya tiene datos requiere espacio especie. Algunas espacio especie proviene de memoria asignada para el creador del ndice. La cantidad para cada usuario se determina por el parmetro de inicializacin SORT_AREA_SIZE . La base de datos tambin swaps de tipo de informacin desde y hacia los segmentos temporales que slo son asignados durante la creacin del ndice en el espacio de tablas temporal usuarios. Bajo ciertas condiciones, los datos pueden ser cargados en una tabla con SQL * Loader de va directa y un ndice de carga se puede crear como se cargan los datos.

9.2 ndice de las tablas y columnas correctas


Use las siguientes pautas para determinar cundo se debe crear un ndice:

Crear un ndice si con frecuencia desea recuperar menos del 15% de las filas en una tabla grande. El porcentaje vara mucho de acuerdo con la velocidad relativa de una exploracin de la tabla y cmo la distribucin de los datos de la fila en relacin con la clave de ndice. Cuanto ms rpido el recorrido de la tabla, menor ser el porcentaje, cuanto ms agrupados los datos de fila, mayor el porcentaje. Para mejorar el rendimiento en uniones de varias tablas, columnas de ndice utilizados para las combinaciones.

Nota: Tablas pequeas no requieren ndices. Si una consulta se est llevando demasiado tiempo la tabla podra haber pasado de pequeo a grande. Las columnas que son adecuados para la indexacin

Algunas columnas son fuertes candidatos para la indexacin. Las columnas con una o ms de las siguientes caractersticas son candidatos para la indexacin:

Los valores son relativamente nica en la columna. Hay una amplia gama de valores (bueno para ndices regulares). Hay un pequeo rango de valores (bueno para los ndices de mapa de bits).

17

La columna contiene valores nulos muchas, pero las consultas suelen seleccionar todas las filas que tienen un valor. En este caso, utilice la siguiente frase:
WHERE COL_X > -9.99 * power(10,125)

Uso de la frase anterior es preferible:


WHERE COL_X IS NOT NULL

Esto es porque el primero utiliza un ndice en COL_X (suponiendo que COL_X es una columna numrica). Las columnas que no son adecuados para la indexacin

Las columnas con las siguientes caractersticas son menos adecuadas para la indexacin:

Hay muchos valores nulos en la columna y no buscar en los valores no nulos. LONG y LONG RAW columnas no pueden ser indexados. Columnas Virtuales

Puede crear ndices exclusivos o no exclusivos-en columnas virtuales.

9.3 Columnas Orden de ndice de Rendimiento


El orden de las columnas en el CREATE INDEX declaracin puede afectar al rendimiento de la consulta. En general, especifique las columnas ms utilizadas en primer lugar. Si crea un ndice solo a travs de columnas para acelerar preguntas que acceso, por ejemplo, col1, col2, y col3; entonces las preguntas que el acceso slo col1 o ese acceso slo col1 y col2, tambin se acelera. Pero una pregunta que tuvo acceso slo col2, slo col3, o slo col2 y col3 no usa el ndice.

9.4 Limite el nmero de ndices para cada tabla


Una tabla puede tener cualquier nmero de ndices. Sin embargo, ms ndices all son, ms elevado se incurre ya que la tabla se modifica. En concreto, cuando las filas se insertan o se eliminan, todos los ndices de la tabla deben ser actualizados tambin. Tambin, cuando una columna se actualiza, se deben actualizar todos los ndices que contienen la columna. Por lo tanto, , hay una compensacin entre la velocidad de recuperar datos de una tabla y la velocidad de actualizacin de la tabla. Por ejemplo, si una tabla es principalmente de slo lectura, tener ms ndices puede ser til; pero si una tabla est muy actualizado, tener menos ndices podra ser preferible.

9.5 Eliminar ndices que ya no son requeridos


18

Considere la posibilidad de eliminar un ndice si:


No acelerar las consultas. La tabla puede ser muy pequeo, o puede haber muchas filas de la tabla, pero muy pocas entradas de ndice. Las consultas en las aplicaciones no utilizan el ndice. El ndice debe ser dropeada antes de ser reconstruida.

9.6 Estimar el tamao del ndice y establecer parmetros de almacenamiento


Estimar el tamao de un ndice antes de crear uno puede facilitar una mejor planificacin y gestin de espacio de disco. Utilice el tamao estimado de un ndice individual para manejar mejor el espacio en disco que el ndice utiliza. Cuando se crea un ndice, puede establecer los parmetros adecuados de almacenamiento y mejorar el rendimiento de E / S de las aplicaciones que utilizan el ndice. El tamao mximo de una entrada de ndice nico es aproximadamente la mitad del tamao del bloque de datos.

9.7 Especifique el Tablespace para cada ndice


Los ndices se pueden crear en cualquier tablespace. Un ndice se puede crear en mismo tablespace o diferente que la mesa a la cual pone ndice. Si usa mismo tablespace para una mesa y su ndice, puede ser ms conveniente realizar el mantenimiento de la base de datos (como tablespace o reserva del archivo) o asegurar la disponibilidad de aplicacin. Todos los datos relacionados siempre son en lnea juntos.

9.8 Considere la posibilidad de la creacin de ndices Paralelizacin


Puede la creacin del ndice parallelize, ms o menos lo mismo como puede la creacin de la mesa parallelize. Como procesos mltiples trabajan juntos para crear el ndice, la base de datos puede crear el ndice ms rpidamente que si un proceso del servidor solo creara el ndice secuencialmente. Creando un ndice en la paralela, los parmetros de almacenaje son usados por separado por cada proceso del servidor de la pregunta. Por lo tanto, un ndice creado con un valor INICIAL de 5M y un grado paralelo de 12 consume al menos 60M del almacenaje durante la creacin del ndice.

19

10.

VISTAS DEL DICCIONARIO DE DATOS NDICES

Las siguientes vistas muestran informacin acerca de los ndices:


Ver
DBA_INDEXES ALL_INDEXES USER_INDEXES

Descripcin
DBA vista describe los ndices de todas las tablas de la base de

datos. TODO vista describe los ndices de todas las tablas accesibles para el usuario. USUARIO vista se limita a los ndices de propiedad del usuario. Algunas columnas de estas vistas contienen estadsticas que se generan por la DBMS_STATS paquete o ANALYZE comunicado. Estos puntos de vista describir las columnas de ndices en tablas. Algunas columnas de estas vistas contienen estadsticas que se generan por la DBMS_STATS paquete o ANALYZE comunicado. Estos puntos de vista describir las expresiones de funcin basados en ndices en tablas.

DBA_IND_COLUMNS ALL_IND_COLUMNS USER_IND_COLUMNS DBA_IND_EXPRESSIONS ALL_IND_EXPRESSIONS USER_IND_EXPRESSIONS DBA_IND_STATISTICS ALL_IND_STATISTICS USER_IND_STATISTICS INDEX_STATS

Estas vistas contienen estadsticas del optimizador para los ndices.

Almacena informacin de la ltima ANALYZE INDEX...VALIDATE STRUCTURE statement. Almacena informacin de la ltima ANALYZE INDEX...VALIDATE STRUCTURE statement. Contiene informacin de los ndices de uso producido por el ALTER INDEX...MONITORING el uso de la funcionalidad.

INDEX_HISTOGRAM

V$OBJECT_USAGE

20

http://www.comp.dit.ie/btierney/oracle11gdoc/server.111/b28286/statements_8016.htm http://docs.oracle.com/cd/B28359_01/server.111/b28310/indexes003.htm http://www.techonthenet.com/oracle/indexes.php http://docs.oracle.com/cd/B28359_01/server.111/b28310/indexes002.htm http://www.oracle-base.com/articles/10g/index-monitoring.php http://www.ajpdsoft.com/modules.php?name=News&file=article&sid=449#.UDZp46AY0gQ

21