/*
什么时候使用分区表:
1、表的大小超过2GB。
2、表中包含历史数据,新的数据被增加都新的分区中。
(3).表分区的优缺点
表分区有以下优点:
1、改善查询性能:对分区对象的查询可以仅搜索自己关心的分区,提高检索速度。
2、增强可用性:如果表的某个分区出现故障,表在其他分区的数据仍然可用;
3、维护方便:如果表的某个分区出现故障,需要修复数据,只修复该分区即可;
4、均衡I/O:可以把不同的分区映射到磁盘以平衡I/O,改善整个系统性能
*/
--//查询表上的分区
SELECT * FROM user_tab_partitions WHERE TABLE_NAME = 'SETTLE_OVERALL_934';
--//添加分区
ALTER TABLE SALES ADD PARTITION P3 VALUES LESS THAN(TO_DATE('2003-06-01',
'YYYY-MM-DD'));
--注意:以上添加的分区界限应该高于最后一个分区界限。
--//删除分区
ALTER TABLE SALES DROP PARTITION P3;
--//分区方式
--一.范围分区:
--例一
CREATE TABLE CUSTOMER(CUSTOMER_ID NUMBER NOT NULL PRIMARY KEY,
FIRST_NAME VARCHAR2(30) NOT NULL,
LAST_NAME VARCHAR2(30) NOT NULL,
PHONE VARCHAR2(15) NOT NULL,
EMAIL VARCHAR2(80),
STATUS CHAR(1)) PARTITION BY RANGE(CUSTOMER_ID)(PARTITION
CUS_PART1
VALUES LESS
THAN(100000)
TABLESPACE
CUS_TS01,
PARTITION
CUS_PART2
VALUES LESS
THAN(200000)
TABLESPACE
CUS_TS02)
--例二:按时间划分
CREATE TABLE ORDER_ACTIVITIES(ORDER_ID NUMBER(7) NOT NULL,
ORDER_DATE DATE,
TOTAL_AMOUNT NUMBER,
CUSTOTMER_ID NUMBER(7),
PAID CHAR(1)) PARTITION BY RANGE(ORDER_DATE)(PARTITION
ORD_ACT_PART01
VALUES LESS
THAN(TO_DATE('01- MAY -2003',
'DD-MON-YYYY'))
TABLESPACEORD_TS01,
PARTITION
ORD_ACT_PART02
VALUES LESS
THAN(TO_DATE('01-JUN-2003',
'DD-MON-YYYY'))
TABLESPACE
ORD_TS02,
PARTITION
ORD_ACT_PART02
VALUES LESS
THAN(TO_DATE('01-JUL-2003',
'DD-MON-YYYY'))
TABLESPACE
ORD_TS03)
--例三:MAXVALUE
CREATE TABLE RangeTable(idd INT PRIMARY KEY, iNAME VARCHAR(10), grade INT) PARTITION BY RANGE(grade)(PARTITION
part1
VALUES LESS
THEN(1000)
TABLESPACE
Part1_tb,
PARTITION
part2
VALUES LESS
THEN(MAXVALUE)
TABLESPACE
Part2_tb);
--二.列表分区:
--该分区的特点是某列的值只有几个,基于这样的特点我们可以采用列表分区。
--例一
CREATE TABLE PROBLEM_TICKETS
(
PROBLEM_ID NUMBER(7) NOT NULL PRIMARY KEY,
DESCRIPTION VARCHAR2(2000),
CUSTOMER_ID NUMBER(7) NOT NULL,
DATE_ENTERED DATE NOT NULL,
STATUS VARCHAR2(20)
)
PARTITION BY LIST (STATUS)
(
PARTITION PROB_ACTIVE VALUES ('ACTIVE') TABLESPACE PROB_TS01,
PARTITION PROB_INACTIVE VALUES ('INACTIVE') TABLESPACE PROB_TS02
--例二
CREATE TABLE ListTable
(
id INT PRIMARY KEY ,
name VARCHAR (20),
area VARCHAR (10)
)
PARTITION BY LIST (area)
(
PARTITION part1 VALUES ('guangdong','beijing') TABLESPACE Part1_tb,
PARTITION part2 VALUES ('shanghai','nanjing') TABLESPACE Part2_tb
);
)
--//合并分区
ALTER TABLE SALES MERGE PARTITIONS P1,P2 INTO PARTITION P2;
什么时候使用分区表:
1、表的大小超过2GB。
2、表中包含历史数据,新的数据被增加都新的分区中。
(3).表分区的优缺点
表分区有以下优点:
1、改善查询性能:对分区对象的查询可以仅搜索自己关心的分区,提高检索速度。
2、增强可用性:如果表的某个分区出现故障,表在其他分区的数据仍然可用;
3、维护方便:如果表的某个分区出现故障,需要修复数据,只修复该分区即可;
4、均衡I/O:可以把不同的分区映射到磁盘以平衡I/O,改善整个系统性能
*/
--//查询表上的分区
SELECT * FROM user_tab_partitions WHERE TABLE_NAME = 'SETTLE_OVERALL_934';
--//添加分区
ALTER TABLE SALES ADD PARTITION P3 VALUES LESS THAN(TO_DATE('2003-06-01',
'YYYY-MM-DD'));
--注意:以上添加的分区界限应该高于最后一个分区界限。
--//删除分区
ALTER TABLE SALES DROP PARTITION P3;
--//分区方式
--一.范围分区:
--例一
CREATE TABLE CUSTOMER(CUSTOMER_ID NUMBER NOT NULL PRIMARY KEY,
FIRST_NAME VARCHAR2(30) NOT NULL,
LAST_NAME VARCHAR2(30) NOT NULL,
PHONE VARCHAR2(15) NOT NULL,
EMAIL VARCHAR2(80),
STATUS CHAR(1)) PARTITION BY RANGE(CUSTOMER_ID)(PARTITION
CUS_PART1
VALUES LESS
THAN(100000)
TABLESPACE
CUS_TS01,
PARTITION
CUS_PART2
VALUES LESS
THAN(200000)
TABLESPACE
CUS_TS02)
--例二:按时间划分
CREATE TABLE ORDER_ACTIVITIES(ORDER_ID NUMBER(7) NOT NULL,
ORDER_DATE DATE,
TOTAL_AMOUNT NUMBER,
CUSTOTMER_ID NUMBER(7),
PAID CHAR(1)) PARTITION BY RANGE(ORDER_DATE)(PARTITION
ORD_ACT_PART01
VALUES LESS
THAN(TO_DATE('01- MAY -2003',
'DD-MON-YYYY'))
TABLESPACEORD_TS01,
PARTITION
ORD_ACT_PART02
VALUES LESS
THAN(TO_DATE('01-JUN-2003',
'DD-MON-YYYY'))
TABLESPACE
ORD_TS02,
PARTITION
ORD_ACT_PART02
VALUES LESS
THAN(TO_DATE('01-JUL-2003',
'DD-MON-YYYY'))
TABLESPACE
ORD_TS03)
--例三:MAXVALUE
CREATE TABLE RangeTable(idd INT PRIMARY KEY, iNAME VARCHAR(10), grade INT) PARTITION BY RANGE(grade)(PARTITION
part1
VALUES LESS
THEN(1000)
TABLESPACE
Part1_tb,
PARTITION
part2
VALUES LESS
THEN(MAXVALUE)
TABLESPACE
Part2_tb);
--二.列表分区:
--该分区的特点是某列的值只有几个,基于这样的特点我们可以采用列表分区。
--例一
CREATE TABLE PROBLEM_TICKETS
(
PROBLEM_ID NUMBER(7) NOT NULL PRIMARY KEY,
DESCRIPTION VARCHAR2(2000),
CUSTOMER_ID NUMBER(7) NOT NULL,
DATE_ENTERED DATE NOT NULL,
STATUS VARCHAR2(20)
)
PARTITION BY LIST (STATUS)
(
PARTITION PROB_ACTIVE VALUES ('ACTIVE') TABLESPACE PROB_TS01,
PARTITION PROB_INACTIVE VALUES ('INACTIVE') TABLESPACE PROB_TS02
--例二
CREATE TABLE ListTable
(
id INT PRIMARY KEY ,
name VARCHAR (20),
area VARCHAR (10)
)
PARTITION BY LIST (area)
(
PARTITION part1 VALUES ('guangdong','beijing') TABLESPACE Part1_tb,
PARTITION part2 VALUES ('shanghai','nanjing') TABLESPACE Part2_tb
);
)
--//合并分区
ALTER TABLE SALES MERGE PARTITIONS P1,P2 INTO PARTITION P2;