Sei sulla pagina 1di 3

Tablas Particionadas y Clusterizadas

SISTEMAS UNI

TABLAS PARTICIONADAS Y CLUSTERIZADAS


CONCEPTO
Cuando tenemos tablas con un gran volumen de registros, una de las maneras ms fciles
y eficaces de conseguir mejorar los tiempos de consultas, es particionar las tablas. Esto
significa que, siguiendo un patrn que especifiquemos, Oracle va a dividir la tabla en tablas
ms pequeas, desde el punto de vista fsico, que desde el punto de vista lgico seguir
siendo una nica tabla. Esto mejora considerablemente el tiempo de respuesta de la
consulta, ya que cuando en esta filtra por el patrn especificado, Oracle consultar
(fsicamente) solo la particin correspondiente, y no se recorrer la tabla completa.
Cundo est recomendado usar tablas particionadas? Pues depender un poco del
servidor sobre el que est la base de datos, y del volumen de datos. Pero en principio, de
forma genrica, podramos decir que es recomendable a partir del milln de registros.

----------------------------------- 1. CREACION DE TBS


----------------------------------

CREATE TABLESPACE TBS_ ASIA


DATAFILE 'C:\TEMP\DF_COMPROBANTES_ASIA.DBF'
SIZE 100M;

CREATE TABLESPACE TBS_ EUROPA


DATAFILE 'C:\TEMP\DF_COMPROBANTES_EUROPA.DBF'
SIZE 100M;

CREATE TABLESPACE TBS_ AL


DATAFILE 'C:\TEMP\DF_COMPROBANTES_AL.DBF'
SIZE 100M;

CREATE TABLESPACE TBS_ OTROS


DATAFILE 'C:\TEMP\DF_COMPROBANTES_OTROS.DBF'
SIZE 100M;
----------------------------------- 2. Tabla particionada por lista
---------------------------------CREATE TABLE Ventas
(Ventas_id NUMBER(5),
Ventas_dpto VARCHAR2(20),
Ventas_date DATE default sysdate )
PARTITION BY LIST(Ventas_dpto)
(PARTITION ventas_ASIA VALUES('ASIA')
PARTITION ventas_EUROPA VALUES ('EUROPA')
PARTITION ventas_AL
VALUES ('AL')
PARTITION ventas_otros VALUES(DEFAULT)

INSTRUCTOR : ALAIN MEJIA AVALOS

tablespace
tablespace
tablespace
tablespace

TBS_ ASIA,
TBS_ EUROPA,
TBS_ AL,
TBS_ OTROS );

alain_mejia@hotmail.com

Tablas Particionadas y Clusterizadas

SISTEMAS UNI

----------------------------------- 2. CREACION DE TABLA PARTICIONADA


----------------------------------

CREATE TABLE COMPROBANTES


( IDCOMPROBANTE NUMBER(15),
FECHA
DATE DEFAULT SYSDATE ,
MONTO
NUMBER(15,4) DEFAULT 0,
REGION
VARCHAR(20) NOT NULL,
ESTADO
INTEGER DEFAULT 1 )
PARTITION BY RANGE ( FECHA)
( PARTITION COMPROBANTES_2014 VALUES
LESS THAN ( TO_DATE( '2014-12-31 23:59:00', 'YYYY-MM-DD HH24:MI:SS' ))
TABLESPACE TBS_COMPROBANTES_2014,
PARTITION COMPROBANTES_2015 VALUES
LESS THAN ( TO_DATE( '2015-12-31 23:59:00', 'YYYY-MM-DD HH24:MI:SS' ))
TABLESPACE TBS_COMPROBANTES_2015,
PARTITION COMPROBANTES_2016 VALUES
LESS THAN ( TO_DATE( '2016-12-31 23:59:00', 'YYYY-MM-DD HH24:MI:SS' ))
TABLESPACE TBS_COMPROBANTES_2016 );
----------------------------------- 3. INSERTANDO DATOS
----------------------------------

INSERT INTO COMPROBANTES


SELECT LEVEL, SYSDATE, 350, 'AMERICA' , 1
FROM DUAL CONNECT BY LEVEL < 1000000;
INSERT INTO COMPROBANTES
SELECT LEVEL, TO_DATE( '2015-2-5 23:59:00', 'YYYY-MM-DD HH24:MI:SS'), 350, 'AMERICA' , 1
FROM DUAL CONNECT BY LEVEL < 1000000;

INSERT INTO COMPROBANTES


SELECT LEVEL, TO_DATE( '2016-2-5 23:59:00', 'YYYY-MM-DD HH24:MI:SS'), 350, 'AMERICA' , 1
FROM DUAL CONNECT BY LEVEL < 2000000;
INSERT INTO COMPROBANTES
SELECT LEVEL, TO_DATE( '2017-2-5 23:59:00', 'YYYY-MM-DD HH24:MI:SS'), 350, 'AMERICA' , 1
FROM DUAL CONNECT BY LEVEL < 2;
----------------------------------- 4. CONSULTANDO TABLAS PARTICIONADAS
----------------------------------

SELECT TABLE_NAME, PARTITION_NAME, HIGH_VALUE


FROM USER_TAB_PARTITIONS
WHERE TABLE_NAME = 'COMPROBANTES' ;

INSTRUCTOR : ALAIN MEJIA AVALOS

alain_mejia@hotmail.com

Tablas Particionadas y Clusterizadas

SISTEMAS UNI

----------------------------------- 5. QUERY DE TABLAS PARTICIONADAS


----------------------------------

SELECT * FROM COMPROBANTES PARTITION (COMPROBANTES_2014 );


----------------------------------- 6. AGREGANDO UNA NUEVA PARTICION
----------------------------------

CREATE TABLESPACE TBS_COMPROBANTES_2017


DATAFILE 'C:\TEMP\DF_COMPROBANTES_2017.DBF'
SIZE 100M;
ALTER TABLE COMPROBANTES ADD PARTITION COMPROBANTES_2017
VALUES LESS THAN ( TO_DATE( '2017-12-31 23:59:00', 'YYYY-MM-DD HH24:MI:SS' ))
TABLESPACE TBS_COMPROBANTES_2017 ;

SELECT TABLE_NAME, PARTITION_NAME, HIGH_VALUE


FROM USER_TAB_PARTITIONS
WHERE TABLE_NAME = 'COMPROBANTES'
INSERT INTO COMPROBANTES
SELECT LEVEL, TO_DATE( '2017-2-5 23:59:00', 'YYYY-MM-DD HH24:MI:SS'), 350, 'AMERICA' , 1
FROM DUAL CONNECT BY LEVEL < 2;

----------------------------------- 8. Tabla clusterizadas


---------------------------------CREATE CLUSTER EMP_DEPT ( clave number(3) )
CREATE TABLE deptnew (
deptno NUMBER(3) PRIMARY KEY,
DNAME CHAR(30) )
CLUSTER emp_dept (deptno);
CREATE TABLE empnew (
empno NUMBER(5) PRIMARY KEY,
ename VARCHAR2(15) NOT NULL,
deptno NUMBER(3) REFERENCES deptnew)
CLUSTER emp_dept (deptno);

INSTRUCTOR : ALAIN MEJIA AVALOS

alain_mejia@hotmail.com

Potrebbero piacerti anche