Índices B-Tree en Oracle

Anuncio
Grandes volúmenes de
datos
Índices B-Tree en Oracle
bases de datos
Índices B-Tree en Oracle




Tipo de índice por defecto
El de uso más común
Su estructura de almacenamiento es en árboles B
Para que sea eficiente el sistema de garantizar
que esos Arboles estén ordenados y equilibrados
-> coste computacional si tienen muchas operaciones de inserción, borrado o modificación

Pueden ocupar gran cantidad de espacio
2
Índices B-Tree en Oracle
En este ejemplo solo tenemos un nivel pero
en la práctica pueden ser varios, en
cualquier caso el número necesario de
acceso para recuperar la información se
reduce de forma exponencial
Gráficamente y como aproximación conceptual ( en la práctica pueden ser más complejos)
En cada nodo tendremos los punteros (rowid
en caso de oracle) de los registros accesible
por el valor de ese índice.
En cada página hoja tenemos un puntero a
la siguiente (recorrido secuencial)
3
Índices B-Tree en Oracle

Sintaxis
4
Í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 tendrán 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) ;
6
Índices B-Tree en Oracle

Esta es la sintaxis básica que se puede enriquecer de forma muy extensa mediante
parámetros físicos de almacenamiento y/o comportamiento que pueden incrementar su
eficiencia
7
Í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
)
8
Í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
Ejecución (numpedido, evento, fecha)
CP: numpedido, evento
CAj: numpedido -> Expediente.numpedido
CAj: evento -> Eventos.nombre
9
Í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 crearías índices
B-tree
◦ Escribe las sentencias para los índices que has
identificado
12
Descargar