(salesman_id NUMBER(5), salesman_name VARCHAR2(30

Anuncio
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
Descargar