Tipos de Segmentos Precedencia de la Clásula de Storage Oracle default Tablespace Segment Tipos de Segmentos Table Table partition Cluster Index Tipos de Segmentos Index-organized table Index partition Undo segment Temporary segment Index-Organized Tables Regular table access IOT access ROWID Non-key columns Key column Row header Creating Index-Organized Tables SQL> CREATE TABLE country 2 ( country_id CHAR(2) 3 CONSTRAINT country_id_nn NOT NULL, 4 country_name VARCHAR2(40), 5 currency_name VARCHAR2(25), 6 currency_symbol VARCHAR2(3), 7 map BLOB, 8 flag BLOB, 9 CONSTRAINT country_c_id_pk 10 PRIMARY KEY (country_id)) 11 ORGANIZATION INDEX 12 TABLESPACE indx 13 PCTTHRESHOLD 20 14 OVERFLOW TABLESPACE users; Cluster Types Index cluster Hash cluster Sorted hash cluster Hash function Hash function 1 2 3 Creando un Index Cluster CREATE CLUSTER emp_dept ( deptno NUMBER(3)) CREATE INDEX emp_dept_index SIZE 600 ON CLUSTER emp_dept TABLESPACE users [STORAGE]; TABLESPACE users; CREATE TABLE emp ( empno NUMBER(5) PRIMARY KEY, . . . deptno NUMBER(3) REFERENCES dept) CLUSTER emp_dept (deptno); CREATE TABLE dept ( deptno NUMBER(3) PRIMARY KEY, . . . ) CLUSTER emp_dept (deptno); Sorted Hash Cluster ! Nueva estructura usada para almacenar datos por columnas que no pertenezcan a la clave primaria: " " ! La Cluster key values es hasheada. Los registros correspondientes a una clave de cluster particular son ordenados según la clave de ordenamiento. Usado para garantizar el orden de los registros sin operaciones de ordenamiento: " La clásula ORDER BY no es necesario orden asc. SHC: Ejemplo CREATE CLUSTER calls_cluster Cluster key ( origin_number NUMBER , call_timestamp NUMBER SORT Sort key , call_duration NUMBER SORT) HASHKEYS 10000 SINGLE TABLE HASH IS origin_number SIZE 50; CREATE TABLE calls ( origin_number NUMBER , call_timestamp NUMBER , call_duration NUMBER , other_info VARCHAR2(30)) CLUSTER calls_cluster( origin_number,call_timestamp,call_duration ); SHC: Arquitectura Básica SIZE Cluster key 1 HASHKEYS Cluster key 2 … Cluster key n Rows sorted by sort key in each block chain … Block chain starting points Métodos de Particionamiento Ejemplo: Part por Rango CREATE TABLE sales_range (salesman_id NUMBER(5), salesman_name VARCHAR2(30), sales_amount NUMBER(10), sales_date DATE) PARTITION BY RANGE(sales_date) ( PARTITION sales_jan2000 VALUES LESS THAN(TO_DATE('02/01/2000','DD/MM/YYYY')), PARTITION sales_feb2000 VALUES LESS THAN(TO_DATE('03/01/2000','DD/MM/YYYY')), PARTITION sales_mar2000 VALUES LESS THAN(TO_DATE('04/01/2000','DD/MM/YYYY')), PARTITION sales_apr2000 VALUES LESS THAN(TO_DATE('05/01/2000','DD/MM/YYYY'))); Ejemplo: Part por Enumeración CREATE TABLE sales_list( salesman_id NUMBER(5), salesman_name VARCHAR2(30), sales_state VARCHAR2(20), sales_amount NUMBER(10), sales_date DATE) PARTITION BY LIST(sales_state) (PARTITION sales_west VALUES('California', 'Hawaii'), PARTITION sales_east VALUES ('New York', 'Virginia', 'Florida'), PARTITION sales_central VALUES('Texas', 'Illinois') PARTITION sales_other VALUES(DEFAULT)); INSERTAR (10, 'Jones', 'Hawaii', 100, '05-JAN-2000') sales_west # (21, 'Smith', 'Florida', 150, '15-JAN-2000') sales_east # (32, 'Lee', 'Colorado', 130, '21-JAN-2000') sales_other. # Ejemplo: Part por Hash CREATE TABLE sales_hash (salesman_id NUMBER(5), salesman_name VARCHAR2(30), sales_amount NUMBER(10), week_no NUMBER(2)) PARTITION BY HASH(salesman_id) PARTITIONS 4 STORE IN (data1, data2, data3, data4); " Es la mejor elección cuando: # # # No se conoce de antemano cuantos datos se almacenarán en un rango dado. Los tamaños de las particiones por rango pueden diferir sustancialmente y puede ser difícil balancearlos manualmente Las particiones por rango pueden causar que los datos tenga una agrupación no deseada. Particionamiento compuesto Ejemplo: Part Compuesto (Rango-Enumeración) CREATE TABLE bimonthly_regional_sales (deptno NUMBER, item_no VARCHAR2(20), txn_date DATE, txn_amount NUMBER, state VARCHAR2(2)) PARTITION BY RANGE (txn_date) SUBPARTITION BY LIST (state) SUBPARTITION TEMPLATE( SUBPARTITION east VALUES('NY', 'VA', 'FL') TABLESPACE ts1, SUBPARTITION west VALUES('CA', 'OR', 'HI') TABLESPACE ts2, SUBPARTITION central VALUES('IL', 'TX', 'MO') TABLESPACE ts3) ( PARTITION janfeb_2000 VALUES LESS THAN (TO_DATE('1-MAR-2000','DD-MON-YYYY')), PARTITION marapr_2000 VALUES LESS THAN (TO_DATE('1-MAY-2000','DD-MON-YYYY')), PARTITION mayjun_2000 VALUES LESS THAN (TO_DATE('1-JUL-2000','DD-MON-YYYY')) ); Partition Pruning 99-Jan 99-Feb 99-Mar 99-Apr 99-May 99-Jun sales Partition pruning: Only the relevant partitions are accessed. SQL> 2 3 4 5 6 7 SELECT SUM(sales_amount) FROM sales WHERE sales_date BETWEEN TO_DATE(‘01-MAR-1999’, ‘DD-MON-YYYY’) AND TO_DATE(‘31-MAY-1999’, ‘DD-MON-YYYY’); Data Storage Structures Heap table Cluster Organization by value Heap Clustered Partitioned table Indexorganized table Sorted