Leccion 02 Tablas Particionadas y Clusterizadas

download Leccion 02 Tablas Particionadas y Clusterizadas

of 3

description

Tutorial para crear

Transcript of Leccion 02 Tablas Particionadas y Clusterizadas

  • Tablas Particionadas y Clusterizadas SISTEMAS UNI

    INSTRUCTOR : ALAIN MEJIA AVALOS [email protected]

    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') tablespace TBS_ ASIA, PARTITION ventas_EUROPA VALUES ('EUROPA') tablespace TBS_ EUROPA, PARTITION ventas_AL VALUES ('AL') tablespace TBS_ AL, PARTITION ventas_otros VALUES(DEFAULT) tablespace TBS_ OTROS );

  • Tablas Particionadas y Clusterizadas SISTEMAS UNI

    INSTRUCTOR : ALAIN MEJIA AVALOS [email protected]

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

    -- 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' ;

  • Tablas Particionadas y Clusterizadas SISTEMAS UNI

    INSTRUCTOR : ALAIN MEJIA AVALOS [email protected]

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

    -- 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);