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)) SIZE 600 TABLESPACE users [STORAGE]; CREATE INDEX emp_dept_index ON CLUSTER emp_dept 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 ( origin_number NUMBER, call_timestamp NUMBER SORT, call_duration NUMBER SORT) HASHKEYS 10000 SINGLE TABLE HASH IS origin_number SIZE 50; Cluster key Sort key 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 HASHKEYS Cluster key 1 Cluster key 2 Cluster key n Block chain starting points Rows sorted by sort key in each block chain
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 Partition pruning: Only the relevant partitions are accessed. SQL> SELECT SUM(sales_amount) 2 FROM sales 3 WHERE sales_date BETWEEN 4 TO_DATE( 01-MAR-1999, 5 DD-MON-YYYY ) AND 6 TO_DATE( 31-MAY-1999, 7 DD-MON-YYYY ); sales
Data Storage Structures Heap table Heap Cluster Organization by value Clustered Indexorganized table Sorted Partitioned table