4)改善查询性能【检索自己需要的分区,提高检索速度】
4、分类 4.1)范围分区--最早,最经典,数据管理能力强,但分配不均匀范围分区就是对数据表中的某个值的范围进行分区,根据某个值的范围,决定将该数据存储在哪个分区上
这种分区方式是最为常用的,并且分区键经常采用日期,数值
1)语法:
create table 表名
(
字段名1 类型 [约束],
...
字段名n 类型 [约束]
)
表分区的定义
partition by range (column_name)
(
partition part1 values less than (rang1) [tablespace tbs1],
partition part2 values less than (rang2) [tablespace tbs2],
...
partition partn values less than (maxvalue) [tablespace tbsn],
);
其中,
column_name: 指定分区字段
part1...partn:是表分区的名称
rang1...maxvalue:表分区的边界值,其中maxvalue表示边界最大值,每个分区的边界值必须比下一个分区的边界值小
tablespace:表空间(可选),指定表分区所在的表空间
tbs1...tbsn:表分区所在的表空间
注意:只能在创建表时创建表分区(指定相关的表分区类型),而不能对现有的表(未创建表分区)创建表分区
2)例子:
eg1:根据某个值的范围来分区
create table part_andy1
(
andy_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),
tatus char(1)
)partition by range (andy_id)(
partition part1 values less than (10000) ,
partition part2 values less than (20000)
);
说明:
andy_id字段的数值小于10000分配在part1分区,
andy_id字段的数值大于等于10000且小于20000分配在part2分区,
andy_id字段的数值大于等于20000将会出错,数据无法添加
eg2:根据日期分区
注意:如果是date类型的字段,则必须使用年份为4个字符的格式,需要使用to_date()函数指定分区边界
create table part_andy2
(
order_id number(7) not null,
order_date date,
otal_amount number,
custotmer_id number(7),
paid char(1)
)partition by range (order_date)(
partition p1 values less than (to_date('2014-10-1', 'yyyy-mm-dd')) ,
partition p2 values less than (to_date('2015-10-1', 'yyyy-mm-dd')) ,
partition p3 values less than (maxvalue)
);
说明:
order_date在2014-10-1之前的,分配在p1分区,
order_date大于或等于2014-10-1且小于2015-10-1的,分配在p2分区,
order_date大于或等于2015-10-1,分配在p3分区
3)修改分区--分区界限必须调整为高于最后一个分区界限
alter table 表名
add partition 表分区名称 values less than (值);
alter table part_andy1
add partition part3 values less than (30000)
4)截断分区--分区中数据将全部删除,但分区依然存在
alter table 表名
truncate partition 分区名;
alter table part_andy1
truncate partition part2;
5)合并分区--将两个相邻分区合并成一个新分区,继承原分区中最高上限(可重用上界限名称,下界限不可以,也可以使用新的)
alter table 表名
merge partitions 分区名1,分区名2 into partition 新分区名或原上界限名称;
alter table part_andy1
merge partitions part2,part3 into partition part3;
6)拆分分区--将一个分区在指定的 value 值处一分为二,变成 2 个分区,原分区将不存在,数据将分到相应新的分区
alter table 表名
split partition 原表分区 at (value) into (partition 拆分表分区1,partition 拆分表分区1);
查询part_andy1中,表分区part3的数据
select * from part_andy1 partition(part3);
拆分分区
alter table part_andy1
split partition part3 at (20000) into (partition part31,partition part32);
查看
select * from part_andy1 partition(part31);
select * from part_andy1 partition(part32);
7)变更分区名--将分区名称改变
alter table 表名
rename partition 原分区名 to 新分区
alter table part_andy1
rename partition part31 to part31_new
8)删除分区
alter table 表名
drop partition 分区名
alter table part_andy1
drop partition part31_new
4.2)散列分区--适合静态数据,总体性能最佳,易于实施,均匀