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