1、范围分区
1、创建分区表
---创建范围分区表
CREATE TABLE sales_rang1
(sales_id number not null,
product_id varchar2(5),
sales_date date,
sales_cost number(10),
areacode varchar2(5)
)
partition by range(sales_date)
(partition part1 values less than (to_date('2011/01/01','yyyy/mm/dd')),
partition part2 values less than (to_date('2012/01/01','yyyy/mm/dd')),
partition part3 values less than (to_date('2013/01/01','yyyy/mm/dd')),
partition part4 values less than (to_date('2014/01/01','yyyy/mm/dd'))
);
2、查询分区表
--查询分区表
SELECT table_name,partition_name
FROM user_tab_partitions
WHERE table_name=UPPER('sales_rang1');
3、添加分区
--添加分区
ALTER TABLE sales_rang1 ADD PARTITION part5 VALUES LESS THAN(to_date('2015-01-01','yyyy-mm-dd'));
4、删除分区
--删除part5分区
ALTER TABLE sales_rang1 DROP PARTITION part5;
5、如何把普通表,变成分区表
--第一步:创建test表
CREATE TABLE test
(sales_id number not null,
product_id varchar2(5),
sales_date date,
sales_cost number(10),
areacode varchar2(5)
);
--第二步:给普通表添加(test_rang)分区
CREATE TABLE test_rang
partition by range(sales_date)
(partition part1 values less than (to_date('2011/01/01','yyyy/mm/dd')),
partition part2 values less than (to_date('2012/01/01','yyyy/mm/dd')),
partition part3 values less than (to_date('2013/01/01','yyyy/mm/dd')),
partition part4 values less than (to_date('2014/01/01','yyyy/mm/dd'))
)
AS
select * from test;
--第三步:查看刚才创建的分区
select table_name,partition_name from user_tab_partitions where table_name=upper('test_rang');
图示:
2、间隔分区
实现范围分区的自动化。
最开始的分区是永久分区,随着数据自动创建新的分区
语法
PARTITION BY RANGE(column_name)
INTERVAL(numtoyminterval(n,'interval_unit'))
(PARTITION p1 VALUES LESS THAN(range1));
Ⅰ:其中INTERVAL代表 “间隔”,按照后面括号定义间隔添加分区
Ⅱ:numtoyminterval(n,'interval_unit')函数将n转换成interval_unit所指的值。
interval_unit可以为:YEAR,MONTH
1、创建分区
--创建间隔分区
CREATE TABLE sales_interval
(sales_id number not null,
product_id varchar2(5),
sales_date date,
sales_cost number(10),
areacode varchar2(5)
)
partition by range(sales_date)
INTERVAL(NUMTOYMINTERVAL(1,'YEAR'))
(PARTITION part1 VALUES LESS THAN (to_date('2011/01/01','yyyy/mm/dd'))
);
2、查询分区表
--查询分区表
SELECT table_name,partition_name
FROM user_tab_partitions
WHERE table_name=UPPER('sales_interval');
3、添加数据
--添加数据
insert into sales_interval values (1000,'p1',to_date('2018-11-13','yyyy-mm-dd'),1000,'A1');
4、查询数据
--第一步:查询分区表获得PARTTION_NAME
SELECT table_name,partition_name
FROM user_tab_partitions
WHERE table_name=UPPER('sales_interval');
--第二步:根据PARTTION_NAME查询新增数据
select * from sales_interval partition(SYS_P21)
注意:由于此时采用间隔分区,我们不知道新增数据在哪个分区,因此应该先查询出 PARTION_NAME,再执行查询即可。
5、如何把普通表,变成分区表
--第一步:创建测试表test2
CREATE TABLE test2
(sales_id number not null,
product_id varchar2(5),
sales_date date,
sales_cost number(10),
areacode varchar2(5)
);
--第二步:给普通表创建间隔分区
CREATE TABLE test_interval
partition by range(sales_date)
(INTERVAL(NUMTOYMINTERVAL(1,'YEAR'))
(PARTITION part1 VALUES LESS THAN (to_date('2011/01/01','yyyy/mm/dd'))
)
AS
select * from test2;