分区是管理随时间产生数据的一种好方法。如果每日有大量的数据蜂拥而至,而且需要一种管理旧数据的方法,那么分区可以提供优秀的服务。可以归档或删除一个表内的旧数据而不会影响该表其他部分的性能。针对较大的数据表,特别是每天都会增长的数据表,分区值得仔细研究。能够提供较高水平的并行处理能力。
范围分区
散列分区(表本身无法进行范围分区,那么可以使用散列分区)
复合分区(范围分区+散列分区)
列表分区(列表分区最适合的场合是为了提高性能或因为维护方便而需要显示地控制分区分布,并且分区键无法提供可进行分区的范围时,分区键只能是一个单独的列,不能在两个或多个列上进行列表的分区)
范围-列表分区(只有当您有足够的历史数据用来确定这种高可控制的分区结构时,进行这种分区才可以为应用提供真正的益处)
范围分区:
CREATE TABLE employee_details(
emp_id VARCHAR2(5) PRIMARY KEY,
ename VARCHAR2(25),
job VARCHAR2(20),
dateofjoining DATE
)
PARTITION BY RANGE (dateofjoining)(
PARTITION doj1 VALUES LESS THAN (TO_DATE('01/04/2001','DD/MM/YYYY')),
PARTITION doj2 VALUES LESS THAN (TO_DATE('01/07/2003','DD/MM/YYYY')),
PARTITION doj3 VALUES LESS THAN (TO_DATE('01/09/2004','DD/MM/YYYY')),
PARTITION doj4 VALUES LESS THAN (TO_DATE('01/10/2005','DD/MM/YYYY'))
);
查询某个分区的数据:
SELECT * FROM employee_details PARTITION(doj4);
散列分区:
CREATE TABLE Montyly_Sales(
Product_ID varchar2(5) NOT NULL,
Sales_Date date NOT NULL,
Sales_Cost number
)
PARTITION BY HASH (Product_ID)(
PARTITION pid1,
PARTITION pid2,
PARTITION pid3
);
复合分区:
CREATE TABLE Annul_Sales(
Product_ID varchar2(5) not null,
Sales_Date date not null
)
PARTITION BY RANGE(Sales_Date)
SUBPARTITION BY HASH (Product_ID)
SUBPARTITIONS 8
(
PARTITION P1 VALUES LESS THAN (TO_DATE('01/04/2001','DD/MM/YYYY')),
PARTITION P2 VALUES LESS THAN (TO_DATE('01/07/2003','DD/MM/YYYY')),
PARTITION P3 VALUES LESS THAN (TO_DATE('01/10/2005','DD/MM/YYYY')),
PARTITION P4 VALUES LESS THAN (TO_DATE('01/12/2007','DD/MM/YYYY'))
);
列表分区:
CREATE TABLE Employee_Data(
Employee_ID varchar2(5),
Employee_Name varchar2(20),
Department varchar2(15)
)
PARTITION BY LIST (Department)(
PARTITION D1 values ('Accounts'),
PARTITION D2 values ('Management'),
PARTITION D3 values ('Human Resource')
);
添加分区:
ALTER TABLE SALES ADD PARTITION P4 VALUES LESS THAN (40000);
删除分区:
ALTER TABLE SALES DROP PARTITION P4;
截断分区:
ALTER TABLE SALES TRUNCATE PARTITION P3;
合并分区:
ALTER TABLE SALES MERGE PARTITIONS P1,P2 INTO PARTITION P2;
拆除分区:
ALTER TABLE SALES SPLIT PARTITION P3 AT (DATE '2005-01-01') INTO (PARTITION P31,PARTITION P32);
重命名分区名称:
ALTER TABLE SALES RENAME PARTITION P31 TO P3;