Sei sulla pagina 1di 12

Grandes volmenes de

datos
ndices B-Tree en Oracle

bases de datos

ndices B-Tree en Oracle

Tipo de ndice por defecto


El de uso ms comn
Su estructura de almacenamiento es en rboles B
Para que sea eficiente el sistema de garantizar
que esos Arboles estn ordenados y equilibrados
-> coste computacional si tienen muchas operaciones de insercin, borrado o modificacin

Pueden ocupar gran cantidad de espacio

ndices B-Tree en Oracle

En este ejemplo solo tenemos un nivel pero


en la prctica pueden ser varios, en
cualquier caso el nmero necesario de
acceso para recuperar la informacin se
reduce de forma exponencial

Grficamente y como aproximacin conceptual ( en la prctica pueden ser ms complejos)

En cada nodo tendremos los punteros (rowid


en caso de oracle) de los registros accesible
por el valor de ese ndice.

En cada pgina hoja tenemos un puntero a


la siguiente (recorrido secuencial)

ndices B-Tree en Oracle

Sintaxis

ndices B-Tree en Oracle

Esquema
Nombre del esquema que contiene el ndice
Si se omite se considera el esquema del usuario
Indice
Nombre del ndice a crear
Tabla
Nombre de la tabla sobre la que se desea crear el
ndice
Columna
Nombre de la columna(s) sobre las que se define el
ndice
Si el ndice es compuesto, el orden de las columnas
es importante
ASC o DESC indica el orden que tendrn dentro del
rbol
5

ndices B-Tree en Oracle

Ejemplos
CREATE INDEX idx_cif_empr
ON empresas (cif_empr) ;

CREATE INDEX idx_nomb_empr


ON empresas (nomb_empr) ;
CREATE INDEX idx_cif_nomb_empr
ON empresas (cif_empr, nomb_empr) ;

ndices B-Tree en Oracle

Esta es la sintaxis bsica que se puede enriquecer de forma muy extensa mediante
parmetros fsicos de almacenamiento y/o comportamiento que pueden incrementar su
eficiencia

ndices B-Tree en Oracle

Ejemplo
CREATE UNIQUE INDEX PK_EMPR_CIF_EMPR ON EMPRESAS
(CIF_EMPR)
TABLESPACE INDICES_APP
PCTFREE 10
INITRANS 2
MAXTRANS 255
STORAGE (
INITIAL 500K
NEXT 1M
PCTINCREASE 20
MAXEXTENTS 1000
)

ndices B-Tree en Oracle

Nuestro ejemplo de clase


Empresas (cif, nombre, direccion, cpostal, poblacion, provincia, usuario)
CP: cif
Un: usuario
Pedidos (numpedido, fecha, estado, importe, empresa)
CP: numpedido
CAj: empresa -> Empresas.cif
Expedientes (numexpe, numpedido, servicios)
CP: numexpe, numpedido
CAj: numpedido -> Pedidos.numpedido
Eventos (nombre, descripcion)
CP: nombre
Ejecucin (numpedido, evento, fecha)
CP: numpedido, evento
CAj: numpedido -> Expediente.numpedido
CAj: evento -> Eventos.nombre

ndices B-Tree en Oracle

Nuestro ejemplo de clase

10

ndices B-Tree en Oracle


CREATE TABLE EMPRESAS
(
CIF_EMPR VARCHAR2(10 BYTE),
NOMB_EMPR VARCHAR2(60 BYTE),
DIRE_EMPR VARCHAR2(40 BYTE),
CPOS_EMPR CHAR(5 BYTE),
POBL_EMPR VARCHAR2(20 BYTE),
PROV_EMPR VARCHAR2(15 BYTE),
USUA_EMPR VARCHAR2(10 BYTE) )
CREATE UNIQUE INDEX
PK_EMPR_CIF_EMPR
ON EMPRESAS (CIF_EMPR)
CREATE UNIQUE INDEX
UQ_EMPR_USUA_EMPR
ON EMPRESAS (USUA_EMPR)

ALTER TABLE EMPRESAS ADD (


CONSTRAINT PK_EMPR_CIF_EMPR
PRIMARY KEY (CIF_EMPR)
USING INDEX PK_EMPR_CIF_EMPR,
CONSTRAINT UQ_EMPR_USUA_EMPR
UNIQUE (USUA_EMPR)
USING INDEX UQ_EMPR_USUA_EMPR)

CREATE TABLE EMPRESAS


(
CIF_EMPR VARCHAR2(10 BYTE),
NOMB_EMPR VARCHAR2(60 BYTE),
DIRE_EMPR VARCHAR2(40 BYTE),
CPOS_EMPR CHAR(5 BYTE),
POBL_EMPR VARCHAR2(20 BYTE),
PROV_EMPR VARCHAR2(15 BYTE),
USUA_EMPR VARCHAR2(10 BYTE) ,
Constraint PK_EMPR_CIF_EMPR
PRIMARY KEY (CIF_EMPR),
Constraint UQ_EMPR_USUA_EMPR
UNIQUE (USUA_EMPR)
)

Son equivalentes, aunque no se especifique


Se crean ndices nicos para gestionar
las PK y la UQ

11

ndices B-Tree en Oracle

Ejercicio
Suponiendo que tenemos un numero no muy alto
de empresas y no muy alto de eventos posibles
pero con una cantidad enorme de pedidos (que
solo pueden tener dos estados), localiza en el
esquema columnas para las que crearas ndices
B-tree
Escribe las sentencias para los ndices que has
identificado

12

Potrebbero piacerti anche