Vous êtes sur la page 1sur 30

Tipos de Segmentos

Indices - Clasificacin de ndices

Lgica Una columna o concatenado: Una sola o varias columnas clave Unico o no nico: Permite o no valores duplicados en la clave Basado en funciones: Basado en funciones sobre una o ms columnas de la tabla.

Mecanismo eficiente para evaluar consultasque contienen funciones en su clusula WHERE CREATE INDEX cantidad_a_despachar_idx ON item(cantidad - cantidad_despachada); SELECT orden.id, item.id FROM item WHERE (cantidad - cantidad_despachada) > 0;
2

Indices - Clasificacin de ndices

Fsica

Particionado o no particionado Arbol B


Normal Invertido Bitmap Bitmap Join

Almacenamiento de ndices

Cuando se crea un ndice se asigna automticamente un segmento de ndice. Se puede administrar el espacio de un segmento de ndice de la siguiente forma:

Especificando los parmetros de almacenamiento relacionados con la asignacin de extents Especificando el parmetro PCTFREE

Se puede asignar un tablesape diferente al tablespace de los datos, mejorando as el desempeo. Cuando se crea el ndice, el DBMS hace sort sobre las columnas del ndice y almacena el rowid y el valor del ndice para cada fila.
4

Restricciones sobre ndices

Se pueden crear tantos ndices sobre las tablas como combinaciones de columnas diferentes existan. Se puede crear un ndice sobre el mismo conjunto de columnas, si las mismas estn ordenadas de forma diferente. No se pueden crear dos ndices sobre el mismo atributo. Se puede borrar un ndice sin alterar los datos de la tabla de datos.

Restricciones sobre ndices

Oracle crea automaticamente: Un ndice UNIQUE basado en B*-tree para mantener las columnas que se hayan definido como clave primaria de una tabla utilizando el CONSTRAINT PRIMARY KEY de una tabla no organizada por ndice. Un ndice UNIQUE basado en B*-tree para mantener las columnas sobre las que se defini el CONSTRAINT UNIQUE. Un ndice basado en B*-tree para mantener las columnas que se hayan definido como clave primaria y todas las filas de una tabla organizada por ndice. Un ndice basado en hashing para mantener las filas de un grupo de tablas (cluster) organizado por hash.
6

B-Tree Index
Index entry Root

Branch

Index entry header Leaf Key column length Key column value ROWID

Estructura de un ndice Arbol - B


Estructura La raz del rbol contiene entries que apuntan al prximo nivel del ndice. Luego se tienen nodos internos que a su vez apuntan al prximo nivel. En el nivel ms bajo estn las hojas, que contienen las entradas del ndice que apuntan a filas de la tabla. Las hojas forman una lista doblemente enlazada. Formato de hojas Encabezado que almacena nmero de columnas e informacin sobre locks. Pares (longitud,valor) para las columnas ROWID de la fila que contiene los valores claves Los valores de la clave se repiten No hay entrada para valores nulos
8

Estructura de un ndice Arbol - B


Efecto de operaciones DML sobre el ndice Insercin resulta en la insercin de una entrada en el bloque apropiado Eliminacin resulta en la eliminacin lgica de una entrada. Se deben borrar todas las entradas del bloque para recuperar el espacio. Actualizaciones resultan en eliminacin e insercin. El parmetro PCTFREE solo tiene efecto al momento de creacin del ndice.

Estructura de un ndice Arbol - B


Di Lu Rh

B C Cr

F H Kar

N P Ph

Sam St Su

Karl, ROWID Kathyl, ROWID Kiml, ROWID Lance, ROWID

Luis, ROWID Mark, ROWID Mary, ROWID Mike, ROWID Mike, ROWID

Nancy, ROWID Nancy, ROWID Nancy, ROWID Nicole, ROWID

Pablo, ROWID Paula, ROWID Paula, ROWID Peter, ROWID

Phil, ROWID Pierre, ROWID Rache, ROWID Rajiv, ROWID

Formato de bloques internos o ramas l prefijo mnimo de clave necesario para poder ramificar E puntador al hijo que contiene la clave A loques con n claves, tienen n+1 apuntadores B l nmero de claves y apuntadores est determinado por el tamao del bloque E

10

Ventajas de la estructura de rbol B


odos los nodos hojas estn al mismo nivel, recuperacin de cualquier T registro toma el mismo tiempo rboles B permanecen balanceados automticamente A odos los bloques estn llenos en un 75% en promedio T roveen un buen desempeo para consultas exactas y por rangos P nserciones, modificaciones y eliminaciones son eficientes, y se mantiene el I orden de las claves para una recuperacin rpida l desempeo es bueno para tablas pequeas y grandes y no se degrada E cuando la tabla crece.

11

Bsqueda en ndices basados en Arbol B


squeda exacta B Empieza en el nodo raz Bsqueda de clave ms pequea mayor o igual que el valor Si es mayor que la clave, se sigue el apuntador anterior hasta el hijo. Si es igual a la clave, se sigue el apuntador hasta el hijo Si no existe uno mayor o igual, se sigue el apuntador del valor ms alto del bloque. Repita los pasos si el hijo es un nodo interno. Busca en la hoja la clave igual al valor. Si la clave se encuentra, retorna el ROWID Si la clave no se encuentra, la fila no existe. squeda por rango: B Similar al scan nico pero buscando el lmite inferior del rango Busca en las hojas todas las claves menores o iguales al lmite inferior Se aprovecha la lista enlazada de hojas

12

ndices y nulos
Oracle ignora los registros donde todas las entradas son nulos. CREATE INDEX IDX1 ON EMPLOYEE(NVL(ename,null)

Indices Bitmap
e tiene un bitmap para cada valor de la clave en vez de una lista de S rowids. ada bit del mapa corresponde a un rowid. Si el bit est prendido C significa que la fila con el rowid correspondiente contiene el valor de la clave. na funcin de mapping convierte la posicin del bit a un rowid. U

14

Indices Bitmap
Tienen ventajas sobre los ndices de Arboles B cuando: l nmero de valores diferentes de la clave es bajo y el nmero de tuplas E alto, son muy eficientes en espacio. Ejemplo, el campo estado civil en una tabla de personas. as consultas usan combinaciones de mltiples condiciones WHERE L ay actividad de read-only o poca actividad de actualizacin en las H columnas clave. Cuando hay actualizaciones de la clave , se debe modificar el bitmap y se bloquean todos los registros cubiertos por el bitmap. La estructura es:
Un header del entry que contiene el nmero de columnas e informacin de locks Los pares longitud,valor de cada columna de la clave Start ROWID End ROWID Segmento de bitmap que consiste de un string de bits

15

Ejemplo Bitmap- Tabla base

Ejemplo Bitmap (Bitmap Generado)

Ejemplo Consulta sobre Bitmap


SELECT COUNT(*) FROM CUSTOMER WHERE MARITAL_STATUS = 'married' AND REGION IN ('central','west');

Indices Bitmap
Table File 3 Block 10 Block 11 Index Block 12

start end key ROWID ROWID


<Blue, <Green, <Red, <Yellow, 10.0.3, 10.0.3, 10.0.3, 10.0.3, 12.8.3, 12.8.3, 12.8.3, 12.8.3,

bitmap
1000100100010010100> 0001010000100100000> 0100000011000001001> 0010001000001000010>

Creacin de un ndice Bitmap


CREATE BITMAP INDEX orders_region_id_idx ON orders(region_id) PCTFREE 30 STORAGE(INITIAL 200K NEXT 200K PCTINCREASE 0 MAXEXTENTS 50) TABLESPACE indx;

COMPUTE STATISTICS

CREATE INDEX ord_customer_ix_demo ON orders(customer_id, sales_rep_id) COMPUTE STATISTICS;

Comparacin de Arbol B y Bitmap


Arbol B
Apropiados para columnas con alta cardinalidad Actualizaciones de claves no costosas

Bitmap
Apropiados para columnas con baja cardinalidad identificada Actualizaciones de claves muy costosas

Ineficiente para queries que utilizan predicados OR Util para aplicaciones OLTP Para columnas en donde se consulta menor que o mayor que

Eficiente para queries que utilizan predicados OR Util para aplicaciones de data warehousing con consultas ad hoc Apropiado para consultas AND,OR,NOT o de igualdad

22

ndices Particionados Globalmente sobre Tablas Particionadas

CREATE INDEX employees_global_part_idx ON employees(employee_id) GLOBAL PARTITION BY RANGE(employee_id) (PARTITION p1 VALUES LESS THAN(5000), PARTITION p2 VALUES LESS THAN(MAXVALUE));

ndices globales no particionados sobre tablas particionadas

CREATE INDEX employees_global_idx ON employees(employee_id);

Indices globales para particiones por hash


Indice global particionado por rango

900, 901,
< 1000

1000, 1001,
< MAXVALUE

Indice global particionado por hash

900, 1000,

901, 1001,

Creando ndices globales para particiones por Hash


SQL> CREATE INDEX ghoi_ix 2 ON order_items (order_id) GLOBAL 3 PARTITION BY HASH (order_id) ( 4 PARTITION p1 TABLESPACE tbs_1, 5 PARTITION p2 TABLESPACE tbs_2, 6 PARTITION p3 TABLESPACE tbs_3, 7 PARTITION p4 TABLESPACE tbs_4); SQL> 2 3 4 5 CREATE INDEX ghoi_ix ON order_items (order_id) GLOBAL PARTITION BY HASH (order_id) PARTITIONS 4 STORE IN (tbs_1, tbs_2, tbs_3, tbs_4);

Creacin de una Tabla Particionada Organizada por ndice


CREATE TABLE sales_range( salesman_id NUMBER(5), salesman_name VARCHAR2(30), sales_amount NUMBER(10), sales_date DATE, PRIMARY KEY(sales_date, salesman_id)) ORGANIZATION INDEX INCLUDING salesman_id OVERFLOW TABLESPACE tabsp_overflow PARTITION BY RANGE(sales_date) (PARTITION sales_jan2000 VALUES LESS THAN(TO_DATE('02/01/2000','DD/MM/ YYYY')) OVERFLOW TABLESPACE p1_overflow, PARTITION sales_feb2000 VALUES LESS THAN(TO_DATE('03/01/2000','DD/MM/ YYYY')) OVERFLOW TABLESPACE p2_overflow, PARTITION sales_mar2000 VALUES LESS THAN(TO_DATE('04/01/2000','DD/MM/ YYYY')) OVERFLOW TABLESPACE p3_overflow, PARTITION sales_apr2000 VALUES LESS THAN(TO_DATE('05/01/2000','DD/MM/ YYYY')) OVERFLOW TABLESPACE p4_overflow);

Indices basados en funciones

Indices basados en funciones:


Materializan expresiones que son costosas computacionalmente. Facilitan bsquedas case insensitive

create index upper_full_name on customer ( upper(full_name)); select full_name from customer where upper(full_name) = 'DON BURLESON';

Proveen una forma simple de compresin de datos

Indices Reverse

Invierte los bytes en cada columna indexada. Evita la degradacin del desempeo cuando las modificaciones sobre los ndices estn concentradas en una pequea parte de las hojas del rbol. No son buenos para bsqueda por rango.

Indices Bitmap Join


Indice sobre una tabla que involucra columnas de otras tablas a travs del join. Para DW se usa el ndica sobre la tabla de hechos basados en columnas de las tablas de dimensiones con las que hace Join. Es un join precalculado Ej. Create bitmap index bj1 on f(d. c1, d.c2) from f,d where d.pk=f.fk Select sum(f.sales) from d,f where p.dk-f.fk and d.c1=1 and d.c2=3

Vous aimerez peut-être aussi