Sunteți pe pagina 1din 10

UNIVERSIDAD DE ESPECIALIDADES ESPÍRITU SANTO

FACULTAD DE SISTEMAS, TELECOMUNICACIONES Y ELECTRÓNICA

Asignatura: ADMINISTRACIÓN DE BASE DE DATOS

Título: ÍNDICES

Autores: NATALY IDROVO, ISACC LOOR, MARCELO TRIANA

Profesor: ING. CARLOS MONTES

Guayaquil, julio, 2010


ÍNDICES

Para entender lo que es un índice debemos saber primero como se almacena la


información internamente en las tablas de una base de datos. Cada tabla se divide en
páginas de datos, imaginemos un libro, podríamos escribirlo en "una sola hoja
enorme" al estilo pergamino egipcio, o bien en páginas a las que podemos acceder
rápidamente a través de un índice. Está idea es la que se aplica en el mundo de las
bases de datos, la información está guardada en una tabla (el libro) que tiene muchas
hojas de datos (las páginas del libro), con un índice en el que podemos buscar la
información que nos interesa.

Si queremos buscar la palabra zapato en un diccionario, ¿qué hacemos?


Leemos todo el diccionario hasta encontrar la palabra, con lo que nos
habremos leído el diccionario entero.
Buscamos en el índice en que página está la letra z, y es en esa página donde
buscamos.

Ni que decir tiene que la opción dos es la correcta, y es de este modo como se utiliza
un índice en las bases de datos. Se define el índice a través de uno o más campos y es a
partir de este punto desde donde se busca para, una vez encontrado, devolver el
registro que se encuentre en la posición marcada por el índice.
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 hagan frecuentes búsquedas.

Los índices se actualizan automáticamente cuando realizamos operaciones de escritura


en la base de datos. Este es un aspecto muy importante de cara al rendimiento de las
operaciones de escritura, ya que además de escribir los datos en la tabla se escribirán
también en el índice. Un número elevado de índices hará más lentas estas
operaciones. Sin embargo, salvo casos excepcionales, el beneficio que aportan los
índices compensa (de largo) esta penalización.

VENTAJAS

Evitamos los siguientes problemas: Sobrecarga de CPU, sobrecarga de disco y


concurrencia.
Los índices nos permiten una mayor rapidez en la ejecución de las
consultas tipo SELECT ... WHERE …
Y por último será una ventaja para aquellos campos que no tengan datos
duplicados, sin embargo si es un campo con valores que se repiten
continuamente (Ej. Masculino/Femenino) no es aconsejable.

DESVENTAJAS

Los índices son una desventaja en aquellas tablas en las que se utiliza
frecuentemente operaciones de escritura (Insert, Delete, Update), esto es
porque los índices se actualizan cada vez que se modifica una columna.
Los índices también suponen una desventaja en tablas demasiado
pequeñas puesto que no necesitaremos ganar tiempo en las consultas.
Tampoco son muy aconsejables cuando pretendemos que la tabla sobre la que
se aplica devuelva una gran cantidad de datos en cada consulta.
Por último hay que tener en cuenta que ocupan espacio y en determinadas
ocasiones incluso más espacio que los propios datos.
TIPOS DE ÍNDICES EN ORACLE

ÍNDICE B-TREE

El índice B-Tree es el tipo de índice más común en una base de datos Oracle. Es el
índice por defecto, es decir que si uno crea un índice sin especificar el tipo, Oracle lo
creara de tipo B-Tree.

La estructura de un índice B-Tree tiene la forma de un árbol invertido. Las estructuras


superiores se llaman ramas y la estructura inferior constituye las hojas. Generalmente
los índices B-Tree tienen uno o más niveles de ramas. Las ramas del árbol contienen la
columna índice (la clave) y la dirección de otro bloque. Los nodos hoja contienen la
clave y el ROWID de cada fila de la tabla.

Índices B-tree se utilizan para evitar las grandes operaciones de ordenación. Por
ejemplo, una consulta SQL que requieren 10.000 filas para ser presentado en forma
ordenada con frecuencia utiliza un índice B-tree para evitar el tipo muy grandes
obligados a entregar los datos al usuario final.

Los índices B-TREE obtienen el mejor resultado cuando se aplican sobre columnas con
una alta cardinalidad, es decir, sobre columnas que tengan muchos valores diferentes.

Existen los siguientes tipos de indices B-tree:

TABLAS DE ÍNDICES ORGANIZADOS (INDEX-ORGANIZED TABLES)

Una tabla de índices organizados es una tabla almacenada en una variación de una
estructura de índices B-tree. En una tabla organizada en el heap, las filas se insertan
donde entren. En una tabla de índices organizados, los registros se guardan en un
índice que se define en la clave principal de la tabla. Cada entrada de índice B-tree
también almacena los valores de columna que no son clave.

Las tablas de índices organizados son útiles cuando piezas de datos relacionadas deben
almacenarse juntas o los datos deben estar físicamente almacenados en un orden
específico. Este tipo de tabla es de uso frecuente para la recuperación de información.

ÍNDICE REVERSE-KEY

En este tipo de índice, los bytes de la clave del índice se invierten, por ejemplo, 103 se
almacena como 301. Considere una columna que incluya nombres como “restaurant
A”, “restaurant B” y “restaurant C”. Esta columna tiene muchos valores únicos pero
que no varían mucho al comienzo. En este caso sería ideal usar un índice Reverse-key,
ya que Oracle invertiría la cadena antes de colocarla en el B-tree. Así, el resultado será
un índice más equilibrado, útil y rápido.

ÍNDICE ASCENDENTE Y DESCENDENTE

Este tipo de índice almacena datos en una columna o columnas en orden ascendente o
descendente.

ÍNDICE B-TREE CLUSTER

Este tipo de índice se utiliza para indexar una clave cluster de la tabla. En lugar de
apuntar a una fila, la clave apunta al bloque que contiene las filas relacionadas a la
clave cluster. Un índice clúster es una tabla clúster que utiliza un índice para localizar
los datos.

ÍNDICE HASH CLUSTER

Es como un índice cluster, excepto que la clave del índice es remplazada por una
function hash. No existe índice cluster separado. En un hash cluster, los datos son el
índice. Los Hash clusters pueden ser beneficiosos en los siguientes casos:

o Cuando una tabla es consultada con más frecuencia que modificada.


o La columna de clave hash se consulta a menudo con condiciones de igualdad,
por ejemplo, donde department_id = 20.
o Se puede conjeturar razonablemente el número de claves hash y el tamaño de
los datos almacenados con cada valor de clave.
ÍNDICE DE MAPA DE BITS (BITMAP)

En un índice bitmap, en vez de una lista de rowids, Oracle crea un mapa de bits para
cada valor clave del índice. Cada bit del mapa corresponde a un rowid posible. Si el bit
esta en 1, significa que el rowid contiene dicho valor clave. Una función interna de
Oracle convierte la posición del bit en el rowid correspondiente, de modo tal que los
índices bitmap ofrecen la misma funcionalidad que los índices B-tree, a pesar de la
diferente representación interna. Si la cantidad de valores diferentes del índice es
chica, entonces el índice bitmap será muy eficiente en cuanto al uso de espacio físico.

Los índices Bitmap fueron diseñados principalmente para el almacenamiento de datos


y son muy útiles cuando:

o Las columnas indexadas tienen cardinalidad baja, es decir, el número de valores


distintos es pequeño comparado con el número de filas de la tabla.
o La tabla indexada es de sólo lectura o no está sujeta a modificaciones significativas
por sentencias DML.

ÍNDICE BITMAP JOIN

Estos índices llevan a los índices Bitmap un paso más allá. Ellos toman por completo las
columnas de mapa de bits de los datos de tabla, y lo almacenan en el índice. La
presunción es que esos conjuntos de columnas siempre se consultarán juntos. Estos
índices también son para bases de datos de almacenamiento de datos. La sentencia de
creación se parece la de un índice Bitmap excepto que tiene una cláusula WHERE al
final.

ÍNDICE BASADO EN FUNCIONES (FUNCTION BASED)

Se pueden crear índices en las funciones y expresiones que incluyan una o más
columnas en la tabla que se esté indexando. Un índice basado en funciones calcula el
valor de una función o expresión que implique una o varias columnas y la almacena en
el índice. Un índice basado en funciones puede ser un índice B-tree o un índice de
mapa de bits.

La función utilizada para la construcción del índice puede ser una expresión aritmética
o una expresión que contenga una función SQL, función PL/SQL definida por el usuario,
función de paquete, o una llamada C. Por ejemplo, una función podría sumar los
valores en dos columnas.

ÍNDICE DE DOMINIO

Este tipo de índice es creado por un usuario para datos en un dominio de aplicación
específica. El índice físico no necesita utilizar una estructura de índices tradicionales y
se pueden almacenar en la base de datos de Oracle como tablas o externamente como
un archivo.

ÍNDICE INVISIBLE

Estos índices son nuevos en 11g. Se crean como un índice normal, pero invisible para el
optimizador basado en costos. Esto puede permitir poner a prueba el rendimiento de
las consultas grandes, sin afectar a la aplicación que está corriendo en ese momento.

ÍNDICE VIRTUAL (SIN SEGMENTO)

Un índice virtual es un índice no-físico (no-segmentos) útil para evaluar si el


optimizador se beneficiarán de la creación del índice antes de crear un índice
físico. Estos no son oficialmente soportados por Oracle pero se utilizan ampliamente,
por el OEM Grid Control.
ÍNDICES ÚNICOS Y NO ÚNICOS

Existen tres tipos de índices cuya naturaleza depende de la forma en que haya sido
creado. Estos tipos son:

Un índice único es aquel que tiene la restricción adicional de que el grupo de


columnas indexadas define una única fila. Sin embargo, si no van a existir más
grupos de columnas con estas características dentro de una misma tabla, se
recomienda crear el conjunto como una clave primaria ya que de todas formas
Oracle asociará un índice único a esta restricción (la clave primaria).

Un índice no único, que es aquel que no impone la restricción de que las filas
no deban repetirse.

Un índice compuesto es aquel que agrupa varias columnas de la tabla. Este tipo
es muy útil cuando las sentencias de selección (SELECT) efectúan búsquedas
por varios criterios (columnas) en una misma tabla. Es importante el orden en
que se ponen las columnas al crear el índice; la columna más referenciada
debería ser puesta en primer lugar y así sucesivamente.

Cuando se crea un índice (de cualquier tipo) también se crea un segmento de datos
para guardar esa información, que también se verá afectada por la misma
cláusula storage que se estudió para el caso de las tablas.

CREACIÓN DE ÍNDICES

La creación de índices, como ya hemos visto, permite acelerar las consultas que se
realizan en la base de datos.
Las sentencias de SQL para manipular índices son:

CREATE INDEX;
DROP INDEX;

La sintaxis para la creación de índices es la siguiente:

CREATE [UNIQUE] INDEX <nombre_indice>


ON <nombre_tabla>(
<nombre_campo> [ASC | DESC]
{,<nombre_campo> [ASC | DESC]})
);

La palabra clave UNIQUE especifica que no pueden existir claves duplicadas en el


índice.

ASC | DESC especifican el criterio de ordenación elegido, ascendente o descendente,


por defecto es ascendente.

Las claves primarias son índices. Los nombres de los índices deben ser únicos.

Para eliminar un índice debemos emplear la sentencia DROP INDEX.

DROP INDEX
<nombre_tabla>.<nombre_indice>;
BIBLIOGRAFÍA

http://www.devjoker.com/contenidos/Tutorial-SQL-/12/Indices.aspx

http://knol.google.com/k/índices-en-oracle#

http://gloriaisabelparra.spaces.live.com/blog/cns!409FD0578C87C97D!176.ent
ry

http://www.comp.dit.ie/btierney/oracle11gdoc/server.111/b28286/statement
s_5011.htm

http://es.wikipedia.org/wiki/Índice_(base_de_datos)

http://susanmendoza.blogspot.com/2009/09/1-que-es-y-para-que-sirve-un-
tablespace.html

http://download.oracle.com/docs/cd/E11882_01/server.112/e10713/indexiot.htm

http://www.dbasupport.com/oracle/ora11g/indexing.shtml

S-ar putea să vă placă și