28
ORACLE Proyecto Final Índex(Tipo-Definición-Ejemplos) Lisseth Funes Tasayco Lissette Hamacto Vargas 03/08/2012 Definición de Índex en Oracle

Create Index

Embed Size (px)

DESCRIPTION

Estructura planificada para el manejo de indices en oracle

Citation preview

Page 1: Create Index

Oracle

Proyecto Final

Índex(Tipo-Definición-Ejemplos)

Lisseth Funes TasaycoLissette Hamacto Vargas

03/08/2012

Definición de Índex en Oracle

Page 2: Create Index

ÍNDEX

1. DEFINICIÓN

- 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 rápido acceso a los registros de una tabla. Al aumentar drásticamente la velocidad de acceso, se suelen usar sobre aquellos campos sobre los cuales se vayan a realizar búsquedas frecuentes.

El índice tiene un funcionamiento similar al índice de un libro, guardando parejas de elementos: el elemento que se desea indexar y su posición en la base de datos. Para buscar un elemento que esté indexado, sólo hay que buscar en el índice de dicho elemento para, una vez encontrado, devolver el registro que se encuentre en la posición marcada por el índice.

Los índices pueden ser creados usando una o más columnas, preparando la base de datos tanto para búsquedas rápidas 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 cálculo u otros métodos.

El espacio en disco requerido para almacenar el índice es típicamente 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 cabrían 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 creación de un índice en Oracle se realiza mediante el comando create index. Cuando se define una clave primaria o una columna unívoca (UNIQUE) durante la creación de una tabla o su mantenimiento, Oracle creará automáticamente un índice de tipo UNIQUE que gestione dicha restricción, como hemos indicado anteriormente. La sintaxis completa de create index es la siguiente:

1

Page 3: Create Index

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.)   [ESTADÍSTICAS 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 unívoco (no debe existir otro nombre de objeto en Oracle) que siga los convenios de denominación 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

distribución del procesamiento y de los datos cuando se insertan muchos valores de datos secuenciales.

ESTADÍSTICA COMPUTE dice a Oracle para recopilar estadísticas durante la creación del índice. Las estadísticas son utilizados por el optimizador elija un "plan de ejecución" 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)   ESTADÍSTICAS DE CÓMPUTO;

En Oracle existen tres tipos de índices:

Lectura/EscrituraB-tree (árboles binarios)Function BasedReserve key

Sólo lectura (read only)BitmapBitmap joinIndex-organized table (algunas veces usados en lectura/escritura)Cluster y hash cluster

Domain (muy específicos en aplicaciones Oracle)

2

Page 4: Create Index

2. REGLAS EN EL DISEÑO 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 cláusula WHERE) por lo general no toman mucha

ventaja de los índices.

3. CREAR ÍNDICES(Create Índex)

3.1 Crear un índice explícitamente

Puede crear índices de forma explícita (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 configuración de varios almacenes y un espacio de tabla se especifican explícitamente 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 automáticamente.

3.2 La creación de un índice único de forma explícita

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 restricción en los valores de columna.

Utilice el CREATE UNIQUE INDEX instrucción 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 automática la definición de un índice único en la clave única. Esto se discute en la siguiente sección. Sin embargo, es aconsejable que cualquier índice que existe para el rendimiento de consulta, incluyendo índices únicos, ser creado explícitamente.

3

Page 5: Create Index

3.3 Creación de un índice asociado a una restricción

Oracle Database impone un ÚNICO clave o PRIMARY KEY restricción de integridad en una tabla junto a la creación de un índice único en la clave única o clave primaria. Este índice se crea automáticamente la base de datos cuando la restricción está habilitada. Ninguna acción es requerida por usted cuando se emite la sentencia CREATE TABLE o ALTER TABLE instrucción para crear el índice, pero si lo desea, puede especificar un índice con cláusula de ejercer control sobre su creación. Esto incluye tanto una restricción cuando se define y se habilita, y cuando una restricción definida pero deshabilitado está habilitado.

3.3.1 Especificación de las opciones de almacenamiento para un índice asociado a una restricción

Puede configurar las opciones de almacenamiento para los índices asociados con UNIQUE y PRIMARY KEY restricciones utilizando el índice mediante cláusula. El siguiente CREATE TABLE declaración permite una PRIMARY KEY restricción 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 Especificación del índice asociado a una restricción

Si usted requiere un control más explícito 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 restricción

Especifique un CREATE INDEX declaración de que la base de datos se va a utilizar para crear el índice y hacer cumplir la restricción

Estas opciones se especifican mediante la cláusula 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);

4

Page 6: Create Index

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 restricción y también utiliza este índice para otra restricción, el sistema intentará reorganizar las cláusulas para crear el índice antes de volver a usarlo.

3.4 Recopilación de estadísticas en el fondo al crear un índice

Base de Datos Oracle le ofrece la oportunidad de recopilar estadísticas a un costo recurso muy poco durante la creación o reconstrucción de un índice. Estas estadísticas se almacenan en el diccionario de datos para su uso continuo por el optimizador en la elección de un plan para la ejecución de sentencias SQL. La declaración siguiente calcula el índice, la tabla y la estadística 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 Creación de un índice grande

Al crear un índice extremadamente grande, considerar la asignación de un espacio de tabla temporal mayor para la creación 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 opción ALTER USER declaración 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 continuación, utilice el ALTER USER declaración 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 expansión de su costumbre, y por lo general compartido, tablespace temporal a un tamaño excesivamente grande que puede afectar al rendimiento futuro.

3.6 La creación de un Index Online

Puede crear y volver a generar índices en línea. 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 construcción se lleva a cabo, pero las operaciones de

5

Page 7: Create Index

DDL no están permitidos. La ejecución paralela no se admite al crear o volver a generar un índice en línea.

Las siguientes declaraciones ilustran las operaciones de índice en línea de compilación:

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

3.7 Creación de un índice basado en funciones

Función de base de índices de facilitar las consultas que califican a un valor devuelto por una función o expresión. El valor de la función o expresión se calcula previamente y almacena en el índice.

Además 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 . También, usted apenas tiene el EXECUTE privilegio de objeto en cualquier función definida por el usuario (s) que se utiliza en el índice basado en las funciones si dichas funciones son propiedad de otro usuario.

Además, para utilizar un índice basado en las funciones:

La tabla debe ser analizado después se crea el índice.

La consulta debe ser garantizado para no necesitar ningún NULL los valores de la expresión indexada, ya que NULL valores no se almacenan en los índices.

Ejemplo 1:

Para ilustrar un índice basado en la función, considere la declaración siguiente que define un índice basado en la función (area_index) definido en el área de función (geo):

CREATE INDEX area_index ON rivers (area(geo));

En la siguiente sentencia SQL, cuando area (geo) se hace referencia en el DONDE cláusula, 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 función que está utilizando, puede ser invalidada cuando cambia de función. Si la función es válida, puede utilizar un ALTER INDEX...ENABLE declaración para que un índice basado en las funciones que se ha

6

Page 8: Create Index

desactivado. El ALTER INDEX...DISABLE permite deshabilitar declaración el uso de un índice basado en las funciones. Considere la posibilidad de hacer esto si usted está trabajando en el cuerpo de la función.

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 evaluación de la mayúscula supplier_name campo.

Sin embargo, para estar seguro de que el optimizador de Oracle utiliza este índice al ejecutar las sentencias SQL, asegúrese de que SUPERIOR (supplier_name) no se evalúa como un valor NULL. Para asegurar esto, añadir SUPERIOR (supplier_name) IS NOT NULL a la cláusula WHERE de la siguiente manera:

3.8 Creación de un índice de clave-comprimido

Creación de un índice mediante compresión tecla le permite eliminar las ocurrencias repetidas de los principales valores de la columna de prefijo.

Compresión Key rompe una clave de índice en un prefijo y un sufijo entrada. La compresión 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 más claves para cada bloque índice al tiempo que mejora el rendimiento.

Compresión de clave puede ser útil en las situaciones siguientes:

Usted tiene un índice no único en el ROWID se añade para hacer la llave única. Si utiliza compresión 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 sólo el ROWID .

7

SELECT supplier_id, supplier_name, UPPER(supplier_name)FROM supplierWHERE UPPER(supplier_name) IS NOT NULLORDER BY UPPER(supplier_name);

Page 9: Create Index

Usted tiene un único índice de varias columnas.

Para habilitar la compresión de claves mediante la COMPRESS cláusula. La longitud del prefijo (como el número de columnas de la clave) también se pueden especificar para identificar cómo 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 cláusula también se puede especificar durante la reconstrucción. Por ejemplo, durante la reconstrucción puede deshabilitar la compresión de la siguiente manera:

ALTER INDEX emp_ename REBUILD NOCOMPRESS;

3.9 Crear un índice Invisible

A partir de la versión 11 g , puede crear índices invisibles. Un índice invisible es un índice que es ignorado por el optimizador menos que establezca explícitamente la OPTIMIZER_USE_INVISIBLE_INDEXES parámetro de inicialización al VERDADERO en la sesión o nivel del sistema. Cómo 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 eliminación de un índice antes de que se caiga.

Usar estructuras temporales de índice para ciertas operaciones o módulos de la aplicación, sin perjuicio de la aplicación 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 cláusula. 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;

8

Page 10: Create Index

4. ALTER INDEX (Índices de Alteración)

Para modificar un índice, el esquema debe contener el índice o debe tener el permiso ALTER ANY INDICE privilegio del sistema. Con la instrucción ALTER INDEX declaración, puede:

Reconstruir o fusionarse un índice existente Desasignar espacio no utilizado o asignar una nueva extensión Especificar la ejecución en paralelo (o no) y alterar el grado de paralelismo Alterar los parámetros de almacenamiento o atributos físicos Especifique LOGGING o NOLOGGING Activar o desactivar la compresión clave Marque el índice inutilizable Hacer invisible el índice Cambie el nombre del índice Iniciar o detener la monitorización de uso del índice

No se puede alterar la estructura de índice de columna.

4.1 La alteración de las características de almacenamiento de un índice

Modificar los parámetros 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 instrucción ALTER INDEX comunicado. Por ejemplo, la siguiente sentencia modifica la emp_ename índice:

ALTER INDEX emp_ename STORAGE (PCTINCREASE 50);

Los parámetros de almacenamiento INITIAL  y MINEXTENTS  no pueden ser alterados. Todos los nuevos valores para los parámetros de almacenamiento de este medicamento sólo afectan a extensiones posteriormente asignados para el índice.

Para los índices que implementan restricciones de integridad, puede ajustar los parámetros de almacenamiento mediante la emisión de una sentencia ALTER TABLE declaración que incluya USING INDEX subcláusula del ENABLE . Por ejemplo, la instrucción siguiente cambia las opciones de almacenamiento del índice creado en la tabla emp de hacer cumplir la restricción de clave primaria:

ALTER TABLE emp ENABLE PRIMARY KEY USING INDEX;

4.2 La reconstrucción de un índice existente

Al volver a generar un índice, se utiliza un índice existente como origen de datos. Creación de un índice de esta manera le permite cambiar las características de almacenamiento o trasladarse a un nuevo tablespace. La reconstrucción de un índice basado en un origen de datos existente elimina

9

Page 11: Create Index

intra-bloque de fragmentación. En comparación con el índice cayendo y utilizar el CREATE INDEX declaración, volver a crear un índice existente ofrece un mejor rendimiento.

La siguiente afirmación se vuelve a generar el índice existente emp_name :

ALTER INDEX emp_name REBUILD;

El REBUILD cláusula debe seguir inmediatamente al nombre del índice y preceder a cualquier otra opción. No se puede utilizar en conjunción con la DEALLOCATE UNUSED cláusula.

Usted tiene la opción de reconstruir el índice en línea. Reconstrucción en línea le permite actualizar las tablas base, al mismo tiempo que va a reconstruir. La siguiente afirmación se vuelve a generar el emp_name índice en línea:

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 VISIBILITY---------- ----------IND1 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 están utilizando. Si un índice no se está utilizando, entonces se puede quitar, eliminar sobrecarga innecesaria declaración.

10

Page 12: Create Index

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

ALTER INDEX index MONITORING USAGE;

Más 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 período de tiempo se está supervisando. La vista también contiene el inicio y fin del período de seguimiento, y un MONITORING columna (YES/NO) para indicar si la supervisión uso está actualmente activo.

Cada vez que usted especifique  MONITORING USAGE de V$OBJECT_USAGEvista se restablece en el índice especificado. La información de uso anterior se borra o se reinicia, y una nueva hora de inicio se registra. Cuando se especifica NOMONITORING USAGE, ningún seguimiento posterior se realiza, y el tiempo final se registra para el período de seguimiento. Hasta el próximo  ALTER INDEX...MONITORING USAGE de la declaración es emitida, la información 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 análisis de la estructura del índice, utilizando el ANALYZE INDEX...VALIDATE STRUCTURE declaración, y luego consultar la INDEX_STATS  vista:

SELECT PCT_USED FROM INDEX_STATS WHERE NAME = 'index';

El porcentaje de uso de espacio de índice varía en función 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 realización de la siguiente secuencia de operaciones varias veces:

Analizando las estadísticas

Validación del índice

Comprobación 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

Page 13: Create Index

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 pequeño, 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 válidas 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.

Cómo quitar un índice depende de si se ha creado el índice explícitamente con una CREATE INDEX declaración o implícitamente mediante la definición de una restricción de clave en una mesa. Si ha creado el índice explícitamente con el CREATE INDEX declaración, entonces usted puede quitar el índice con el DROP INDEX declaración. La declaración siguiente se quita el emp_ename índice:

DROP INDEX emp_ename;

No se puede quitar sólo el índice asociado a una habilitado UNIQUE clave o PRIMARY KEY restricción. Para excluir a un índice de restricciones asociadas, debe desactivar o eliminar la propia limitación.

12

Page 14: Create Index

7. SINTAXIS

7.1CREACIÓN

Básica

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

Page 15: Create Index

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.2MODIFICACIÓN

Básica

ALTER INDEX [schema.]index options

14

Page 16: Create Index

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 ELIMINACIÓN

Básica

DROP INDEX [schema.]index [FORCE]

(FORCE sólo 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 más rápidamente contra una mesa. Al igual que el índice de este manual le ayuda a localizar información más rápido que si no existiera el índice, un índice de base de datos Oracle proporciona una ruta de acceso más rápido 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 indexación que proporcionan funcionalidad de actuación complementaria. Estos son:

Índices B-tree: el valor por defecto y el más común

Índices B-tree cluster: definidas específicamente para el grupo

15

Page 17: Create Index

Índices hash cluster: definidas específicamente 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 pequeño conjunto de valores

Basado en las funciones índices: contiene el valor calculado previamente de una función / expresión

Índices de dominio: específicas para una aplicación o un cartucho.

Los índices son lógica y físicamente independiente de los datos en la tabla asociada. Al ser estructuras independientes, quienes requieren un espacio de almacenamiento. Puede crear o quitar un índice sin afectar a las tablas base, aplicaciones de bases de datos, u otros índices. La base de datos mantiene índices automáticamente 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 más lento.

8.1 ESTRUCTURA: B*-TREE

Se estructura como un árbol cuya raíz contiene múltiples entradas y valores de claves que apuntan al siguiente nivel del árbol.

Nivel 0.

tablas pequeñas de datos estáticos.

Nivel 1.

Indexa tablas dinámicas con el valor único de los identificadores de columna.

Nivel 2.

Indexa largas tablas o con poca cardinalidad.

16

Page 18: Create Index

8.2 ESTRUCTURA: BITMAP

Son efectivos para columnas simples con poca cardinalidad, esto es muchos valores distintos.

Más rápidos 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);

9. DIRECTRICES PARA LA GESTIÓN DE LOS ÍNDICES

9.1 Crear índices después de insertar datos de tabla

Los datos se suelen insertar o cargar en una tabla utilizando el SQL * Loader o una utilidad de importación. Es más eficaz para crear un índice para una tabla después de insertar o cargar los datos. Si se crea uno o más índices antes de carga de datos, la base de datos debe actualizar todos los índices, ya que cada fila se inserta.

La creación 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 parámetro de inicialización SORT_AREA_SIZE . La base de datos también swaps de tipo de información desde y hacia los segmentos temporales que sólo son asignados durante la creación del índice en el espacio de tablas temporal usuarios.

Bajo ciertas condiciones, los datos pueden ser cargados en una tabla con SQL * Loader de vía directa y un índice de carga se puede crear como se cargan los datos.

9.2 Índice de las tablas y columnas correctas

17

Page 19: Create Index

Use las siguientes pautas para determinar cuándo 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 varía mucho de acuerdo con la velocidad relativa de una exploración de la tabla y cómo la distribución de los datos de la fila en relación con la clave de índice. Cuanto más rápido el recorrido de la tabla, menor será el porcentaje, cuanto más 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 pequeñas no requieren índices. Si una consulta se está llevando demasiado tiempola tabla podría haber pasado de pequeño a grande.

- Las columnas que son adecuados para la indexación

Algunas columnas son fuertes candidatos para la indexación. Las columnas con una o más de las siguientes características son candidatos para la indexación:

Los valores son relativamente única en la columna.

Hay una amplia gama de valores (bueno para índices regulares).

Hay un pequeño rango de valores (bueno para los índices de mapa de bits).

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 numérica).

- Las columnas que no son adecuados para la indexación

Las columnas con las siguientes características son menos adecuadas para la indexación:

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

18

Page 20: Create Index

- 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 declaración’ puede afectar al rendimiento de la consulta. En general, especifique las columnas más utilizadas en primer lugar.

Si crea un índice solo a través de columnas para acelerar preguntas que acceso, por ejemplo, col1, col2, y col3; entonces las preguntas que el acceso sólo col1 o ese acceso sólo col1 y col2, también se acelera. Pero una pregunta que tuvo acceso sólo col2, sólo col3, o sólo col2 y col3 no usa el índice.

9.4 Limite el número de índices para cada tabla

Una tabla puede tener cualquier número de índices. Sin embargo, más índices allí son, más 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 también. También, cuando una columna se actualiza, se deben actualizar todos los índices que contienen la columna.

Por lo tanto, , hay una compensación entre la velocidad de recuperar datos de una tabla y la velocidad de actualización de la tabla. Por ejemplo, si una tabla es principalmente de sólo lectura, tener más índices puede ser útil; pero si una tabla está muy actualizado, tener menos índices podría ser preferible.

9.5 Eliminar Índices que ya no son requeridos

Considere la posibilidad de eliminar un índice si:

No acelerar las consultas. La tabla puede ser muy pequeño, 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 tamaño del índice y establecer parámetros de almacenamiento

Estimar el tamaño de un índice antes de crear uno puede facilitar una mejor planificación y gestión de espacio de disco. Utilice el tamaño estimado de un índice individual para manejar mejor el espacio en disco que el índice utiliza. Cuando se crea un índice, puede establecer los parámetros adecuados de almacenamiento y mejorar el rendimiento de E / S de las aplicaciones que utilizan el índice.

19

Page 21: Create Index

El tamaño máximo de una entrada de índice único es aproximadamente la mitad del tamaño 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 más conveniente realizar el mantenimiento de la base de datos (como tablespace o reserva del archivo) o asegurar la disponibilidad de aplicación. Todos los datos relacionados siempre son en línea juntos.

9.8 Considere la posibilidad de la creación de índices Paralelización

Puede la creación del índice parallelize, más o menos lo mismo como puede la creación de la mesa parallelize. Como procesos múltiples trabajan juntos para crear el índice, la base de datos puede crear el índice más rápidamente que si un proceso del servidor solo creara el índice secuencialmente.

Creando un índice en la paralela, los parámetros 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 creación del índice.

10. VISTAS DEL DICCIONARIO DE DATOS ÍNDICES

Las siguientes vistas muestran información acerca de los índices:

Ver Descripción

DBA_INDEXES

ALL_INDEXES

USER_INDEXES

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 estadísticas que se generan por la DBMS_STATS paquete o ANALYZE comunicado.

DBA_IND_COLUMNS Estos puntos de vista describir las columnas de índices en

20

Page 22: Create Index

Ver Descripción

ALL_IND_COLUMNS

USER_IND_COLUMNS

tablas. Algunas columnas de estas vistas contienen estadísticas que se generan por la DBMS_STATS paquete o ANALYZE comunicado.

DBA_IND_EXPRESSIONS

ALL_IND_EXPRESSIONS

USER_IND_EXPRESSIONS

Estos puntos de vista describir las expresiones de función basados en índices en tablas.

DBA_IND_STATISTICS

ALL_IND_STATISTICS

USER_IND_STATISTICS

Estas vistas contienen estadísticas del optimizador para los índices.

INDEX_STATS Almacena información de la última ANALYZE INDEX...VALIDATE STRUCTURE statement.

INDEX_HISTOGRAM Almacena información de la última ANALYZE INDEX...VALIDATE STRUCTURE statement.

V$OBJECT_USAGE Contiene información de los índices de uso producido por el ALTER INDEX...MONITORING el uso de la funcionalidad.

21

Page 23: Create Index

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

22