手记

Oracle-13:Oracle中的表分区

Oracle-13:Oracle中的表分区

 

 晨曦Dawn---原文地址

------------吾亦无他,唯手熟尔,谦卑若愚,好学若饥-------------

 

 

本篇博客记录了表分区

表分区的含义:

典型的拿空间换时间的案例!

表分区对一张表进行分区,分区之后表中的数据存在相对应的分区内(可以是不同物理存储的位置),实际上他还是一张表!!!!!!!

 

表分区的好处:

均衡了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)


0人推荐
随时随地看视频
慕课网APP