Oracle-13:Oracle中的表分区
------------吾亦无他,唯手熟尔,谦卑若愚,好学若饥-------------
本篇博客记录了表分区
表分区的含义:
典型的拿空间换时间的案例!
表分区对一张表进行分区,分区之后表中的数据存在相对应的分区内(可以是不同物理存储的位置),实际上他还是一张表!!!!!!!
表分区的好处:
均衡了IO(可以放在多个不同磁盘的位置)
提升了查询性能(可以不必检索所有记录)
维护方便(假如数据出现问题,分区之后只需维护出现问题的那个分区)
增强了可用性(假如一个表分区挂掉了,其他分区可以继续使用,而不是全挂掉)
表分区的缺点:
假如数据量太小,就无需使用表分区,否者浪费性能
提供数据库脚本供测试使用:(合起来了,以免影响阅读)
--创建表分区根据某一列(range)(用范围限定,范围分区)
概念:
表空间的创建:
操作代码
create table TEACHER ( tno NUMBER(4) not null, tname VARCHAR2(30) not null, tid CHAR(18), gendar CHAR(3), birthdate DATE, job VARCHAR2(20), hiredate DATE, sal NUMBER(7,2), deptno NUMBER(2), mgrno NUMBER(4), comm NUMBER(7,2) ) partition by range(tno) ( partition part1 values less than(1030) tablespace partition1, partition part2 values less than(1080) tablespace partition2, partition part3 values less than(maxvalue) tablespace partition3 );
查询表分区
--查询对应表分区下的数据
select * from teacher partition(part3)
--查询所有表分区
select * from all_tab_partitions
--查询子分区和分区(组合分区中用的)
select * from teacher partition(EMPLOYEE_DEPTNO_10)select * from teacher SUBPARTITION(EMPLOYEE_10_JOB_MAGAGER)
删除表分区
--1.删除表分区,包含分区中的所有数据
alter table teacher drop partition part1;--查一下有没有select * from teacher partition(part1)select * from teacherselect * from all_tab_partitions--继续删alter table teacher drop partition part2;alter table teacher drop partition part3;--报错,所以更换另外一种手段
--2.删除表以及它的表分区,到回收站
drop table teacher purge;--查一下select * from all_tab_partitions
--3.清空回收站,以防止有同名表分区
purge table teacher
创建表分区,(list)根据列表(男或者女,中国省份这种定值)
操作:
create table TEACHER ( tno NUMBER(4) not null, tname VARCHAR2(30) not null, tid CHAR(18), gendar CHAR(3), birthdate DATE, job VARCHAR2(20), hiredate DATE, sal NUMBER(7,2), deptno NUMBER(2), mgrno NUMBER(4), comm NUMBER(7,2) ) partition by list(gendar) ( partition part1 values ('男') tablespace partition1, partition part2 values ('女') tablespace partition2 );
创建分区(Hash),必须是2的n次方的分区数量
操作:
create table TEACHER ( tno NUMBER(4) not null, tname VARCHAR2(30) not null, tid CHAR(18), gendar CHAR(3), birthdate DATE, job VARCHAR2(20), hiredate DATE, sal NUMBER(7,2), deptno NUMBER(2), mgrno NUMBER(4), comm NUMBER(7,2) ) partition by hash(tname) ( partition part1 tablespace partition1, partition part2 tablespace partition2 );
组合分区()
可以使用上面三种中的任意俩种,或者任意一种使用俩次进行组合嵌套
对于同一张组合分区表而言,子分区的名字不能相同,即使不在相同的分区里!
操作:
create table TEACHER ( tno NUMBER(4) not null, tname VARCHAR2(30) not null, tid CHAR(18), gendar CHAR(3), birthdate DATE, job VARCHAR2(20), hiredate DATE, sal NUMBER(7,2), deptno NUMBER(2), mgrno NUMBER(4), comm NUMBER(7,2) ) PARTITION BY LIST (DEPTNO) SUBPARTITION BY LIST (JOB) ( PARTITION EMPLOYEE_DEPTNO_10 VALUES (10) TABLESPACE partition1 ( SUBPARTITION EMPLOYEE_10_JOB_MAGAGER VALUES ('考试专员'), SUBPARTITION EMPLOYEE_10_JOB_DEFAULT VALUES (DEFAULT) ), PARTITION EMPLOYEE_DEPTNO_20 VALUES (20) TABLESPACE partition2 ( SUBPARTITION EMPLOYEE_20_JOB_MAGAGER VALUES ('考试专员'), SUBPARTITION EMPLOYEE_20_JOB_DEFAULT VALUES (DEFAULT) ), PARTITION EMPLOYEE_DEPTNO_OTHERS VALUES (DEFAULT) TABLESPACE partition3 ( SUBPARTITION EMPLOYEE_30_JOB_MAGAGER VALUES ('考试专员'), SUBPARTITION EMPLOYEE_30_JOB_DEFAULT VALUES (DEFAULT) ) );
--查询子分区和分区(组合分区中用的)
select * from teacher partition(EMPLOYEE_DEPTNO_10)select * from teacher SUBPARTITION(EMPLOYEE_10_JOB_MAGAGER)