1:分区表的用途
分区表通过对分区列的判断,把分区列不同的记录,放到不同的分区中。分区完全对应应用透明。Oracle的分区表可以包括多 个分区,每个区域都是一个独立的段(SEGMENT),可以存放到不同的表空间中。查询时可以通过查询表来访问各个分区表中的数据,也可以通过在查询时直接指定分区的方法进行查询。
分区表的优点:
(1)由于将数据分散到各个分区中,减少了数据损坏的可能性;
(2)可以对单独的分区进行备份和恢复;
(3)可以将分区映射到不同的物理磁盘上,来分散IO;
(4)提高可管理性、可用性和性能。
数据量大的表,一般大于2GB;数据有明显的界限划分;对于Long和Long Raw类型列不能使用分区。
2:分区的类型
范围分区、散列分区、列表分区、复合分区(范围-散列分区、范围-列表分区)、间隔分区和系统分区等。
3.1范围分区:范围分区根据数据库表中某一字段的值的范围来划分分区
【语法】
在Create Table语句后增加
PARTITION BY RANGE(column_name)
(
PARTITION part1 VALUES LESS THAN (range1) [TABLESPACE tbs1],
PARTITION part2 VALUES LESS THAN (range2) [TABLESPACE tbs2],
....
PARTITION partN VALUES LESS THAN (MAXVALUE) [TABLESPACE tbsN]
);
【说明】
MAXVALUE:当分区列值都不在设置的范围内时,新增数据将到这个分区中
示例:
Create table myemp
( empno number(4)primarykey,
ename varchar2(10),
hiredate date,
sal number(7,2),
deptno number(2)
)
Partition by range(sal)
(
partition p1 values less than(1000),
partition p2 values less than(2000),
partition p3 values less than(maxvalue)
);
-- 插入数据
insertinto myemp(empno,ename,hiredate,sal,deptno)
select empno,ename,hiredate,sal,deptno from emp;
-- 查看工资1000-2000的数据
select*from myemp partition(p2);
-- 删除工资小于1000的数据
deletefrom myemp partition(p1);
-- 查看数据
select*from myemp;
3.2: 列表分区明确指定了根据某字段的某个具体值进行分区,而不是像范围分区那样根据字段的值范围来划分的。【语法】
在Create Table语句后增加
PARTITION BY LIST(column_name)
(
PARTITION part1 VALUES (values_list1),
PARTITION part2 VALUES (values_list2),
....
PARTITION partN VALUES (DEFAULT)
);
其中:column_name是以其为基础创建列表分区的列。
part1...partN是分区的名称。
values_list是对应分区的分区键值的列表。
DEFAULT关键字允许存储前面的分区不能存储的记录。
示例:
-- 创建表,并设置分区
createtable myemp2
( empno number(4)primarykey,
ename varchar2(10),
hiredate date,
sal number(7,2),
deptno number(2)
)
Partition by list(deptno)
(
partition dept10 values(10),
partition dept20 values(20),
partition dept30 values(30),
partition deptx values(default)
);
-- 插入数据
insertinto myemp2(empno,ename,hiredate,sal,deptno)
select empno,ename,hiredate,sal,deptno from emp;
-- 查看部门20的数据
Select * from myemp2 partition(dept20);
-- 删除部门30的数据
Delete from myemp2 partition(dept30);
-- 查看数据
Select * from myemp2;