Sei sulla pagina 1di 10

UNIVERSIDAD DEL CEMA Asignatura: Algoritmos y Estructuras de Datos.

APLICACIN DE RBOLES B* EN LA INDEXACION DE BASE DE DATOS ORACLE

Integrantes: Toric, Solange. Minutillo, Luciano. Profesor: Ing. Rolando Titiosky

Primer cuatrimestre de 2007. Carrera: Ingeniera en Informtica

Introduccin. En este trabajo practico se pretende comprender como estn compuestos y como influyen los ndices en los resultados frente a instrucciones SQL en uno de los mejores motores de bases de datos que se actualmente se encuentran en el mercado, Oracle. Cmo usa oracle los ndices? Qu son los ndices? Los ndices son estructuras opcionales que nos permiten optimizar la performance de las sentencias SQL dentro de una consulta. Las dos estructuras de ndices que maneja oracle son: rboles B*. Bit Map. Nosotros nos enfocaremos en estructuras de ndice de rboles B*. Las caractersticas que tienen los ndices son: Independientes de la tabla. Consumen un espacio mnimo. Reducen el nmero de entradas y salidas (I/O). Adems, pueden ser de varios tipos: ndices nicos (no admiten valores duplicados). ndices No nicos (admiten valores duplicados). ndices de una columna simple. ndices de mltiples columnas (permiten considerar el contenido de varias columnas o el resultado de operaciones entre ellas). Ventajas tienen los rboles B respecto de otras estructuras de datos. Ventajas que ofrece la estructura de los rboles B*: Todos los bloques de la hoja del rbol tienen la misma profundidad, as que la recuperacin de cualquier registro demora aproximadamente el mismo tiempo. Los ndices de los rboles B permanecen automticamente equilibrados. Los rboles B, proveen excelentes resultados en cuanto a la performance para una amplia gama de consultas incluyendo bsquedas exactas o bsquedas entre rangos. Los Inserts, Updates, y Deletes son eficientes debido a que mantienen las claves en orden lo que optimiza la recuperacin de datos hacindola mas rpida. La performance en los rboles B es buena tanto para las tablas pequeas como para las tablas grandes y no empeora a medida que la tabla crece.

Por qu se mejora la performance? Si no se utilizan ndices, para encontrar un valor en la tabla es necesario realizar una lectura secuencial. El orden de la bsqueda para n filas es de n/2 consultas O(n). Sin embargo, utilizando ndices estructurados como rboles B * el orden de la bsqueda se reduce a log(n) O(log(n)), lo que provoca un mejora abismal en la perfomance, como se aprecia en el Figura 1.

120

100

Cantidad de consultas requeridas

80

60

40

20

0
10 00 00 00 0 10 00 00 10 00 00 00 10 00 0 10 00 00 0 10 00 10 0 10 1E + 1E + 10 09 1

Cantidad de filas en la tabla


n log(n)

Figura 1 Diferencia entre la bsqueda Lineal y la bsqueda con ndices.

Qu sabamos de los rboles B*? Son una variante de los rboles B, cuyas caractersticas son las siguientes: No tienen subrboles vacos. El rbol siempre est perfectamente equilibrado. Pgina: nombre de sus nodos. Se los accede en bloque. Todas las Pginas estn en el mismo nivel Como Mximo: m Ramas y m1 Claves Como Mnimo: (m/2)+1 Ramas y (m/2) Claves La Raz puede estar vaca o incluso tener 1 Clave, con sus 2 ramas. La estructura de rboles B* al igual que los rboles B+ incorpora un puntero en cada pgina hacia la pgina siguiente.

Adems propone las siguientes reglas para el mantenimiento: Los nodos deben estar 2/3 llenos siempre. La nueva construccin logra una bsqueda ms rpida que el B+ pero una insercin ms costosa. Si cada nodo tiene un mximo de m descendientes. C/nodo menos la raz tiene al menos (2m-1)/3 hijos. ndices con rboles B* - Estructura Interna

Notar que los rboles B* que utiliza Oracle, no slo tiene un puntero a la pgina siguiente, sino tambin a la anterior. Reduccin de I/O Las bsquedas por ndices son una alternativa a recorrer la tabla completa al intentar encontrar un valor, es decir que es posible reducir los I/O. Los ROWID proveen acceso directo a las filas de la tabla. El balanceo automtico del rbol permite una rpida ubicacin de los valores buscados. Los queries o consultas que slo hacen referencia a columnas indexadas en cierto ndice se pueden resolver directamente en el ndice. Los ndices son automticamente usados y mantenidos por el Oracle Server. Cada ndice tiene sus propios atributos de almacenamiento Deben ser almacenados en una ubicacin separada de la tabla para una utilizacin ptima.

Que son los ROWID? Los ROWID son punteros directos relacionados a una cierta fila en la tabla. Tambin son los encargados de proveer un acceso directo a la fila de la tabla a la que estn asociados. Oracle Server utiliza una codificacin en base 64 de las direcciones fsicas de cada fila y lo almacena automticamente para cada fila de cada tabla en la base de datos. Los ROWID estn compuestos fundamentales de cuatro partes: OOOOOO: El Data Object Number o ID que identifica el segmento de la base de datos. FFF: El nmero de datafile relativo a un tablespace del datafile que contiene la fila. BBBBBB: El bloque de datos que contiene la fila. Los nmeros de bloque son relativos al datafile al que pertenecen, no al tablespace. Dos filas con el mismo nmero de bloque pueden residir en dos datafiles diferentes del mismo tablespace. RRR: La fila en el bloque. ROWID = (OOOOOFFFBBBBBBRRR). ndices con rboles B - Estructura Interna Elementos que componen al rbol. a) Nodos intermedios: Contienen el valor mnimo a considerar para decidir entre dos nodos hijos y punteros a esos nodos hijos. b) Nodos hoja o pginas: Son los que contienen el valor completo considerado como clave de cada fila de la tabla y un identificador de la fila. c) Punteros: Cada nodo hoja o pgina tiene punteros a la pgina anterior y a la siguiente.

Cmo se realiza una bsqueda de un valor determinado? Los pasos que sigue oracle al momento de realizar una bsqueda con ndices, son los siguientes: 1. Se inicia en el nodo raz. 2. Se busca dentro de las claves que contiene, la menor de las claves mayores o iguales a la buscada. 3. Si la clave es mayor al valor buscado se sigue con el puntero al nodo hijo anterior. 4. Si la clave es igual al valor buscado se sigue con el puntero de esa clave al nodo hijo. 5. Si ninguna clave es mayor o igual al valor buscado en el punto 2, se sigue el puntero del mayor valor. 6. Se repiten los pasos del 2 al 4 mientras se encuentre en nodos intermedios (puede haber varios niveles de nodos intermedios). 7. Se busca en el nodo hoja o pgina el valor igual al buscado. 8. Si el valor es encontrado se devuelve el ID de la fila correspondiente. 9. Si el valor no es encontrado, no existe una fila que contenga el valor buscado. Para ver la bsqueda de una manera ms compresiva, vamos a basarnos en un ejemplo, el cual consiste en buscar la palabra Patrick dentro del rbol B*. Entonces, basndonos en los pasos anteriormente mencionados: 1. Se inicia en el nodo raz:

2. Se busca dentro de las claves que contiene, la menor de las claves mayores o iguales a la buscada.

3. Si la clave es mayor al valor buscado se sigue con el puntero al nodo hijo anterior. Rh >= Patric Seguimos el puntero de la clave anterior a Rh, en este caso Lu, que apunta al nodo que contiene Mo, P, Ph

4. Si la clave es igual al valor buscado se sigue con el puntero de esa clave al nodo hijo. 5. Si ninguna clave es mayor o igual al valor buscado en el punto 2, se sigue el puntero del mayor valor. 6. Se repiten los pasos del 2 al 4 mientras se encuentre en nodos intermedios (puede haber varios niveles de nodos intermedios).

Nodo Intermedio

7. Se busca dentro de las claves que contiene, la menor de las claves mayores o iguales a la buscada.

8. Si la clave es mayor al valor buscado se sigue con el puntero al nodo hijo anterior. Ph > Pa Seguimos el puntero de la clave anterior a Ph, en este caso P, que apunta a este nodo.

9. Se repiten los pasos del 2 al 4 mientras se encuentre en nodos intermedios (puede haber varios niveles de nodos intermedios). Ahora, NO es un nodo intermedio.

10. Se busca en el nodo hoja o pgina el valor igual al buscado. Como el valor buscado fue encontrado, se devuelve el ROWID (ID de fila) correspondiente.

Potrebbero piacerti anche