目录

一、概念

二、类型及操作方法

1. 范围分区 range -最常用

2. 列表分区 list

3. 散列分区 hash

4. 组合分区

a. 范围-列表分区

b. 范围-散列分区

三、表分区的查询和维护


一、概念

表空间:是一个或多个数据文件的集合,所有的数据对象都存放在指定的表空间中,但主要存放的是表,所以称作表空间。分区表:将一张表通过某些条件分为几张表,以便提高查询速度和应用程序性能。逻辑上仍是一张整表。即将一筐水果分门别类的放在不同的篮子里,方便找。

二、类型及操作方法

1. 范围分区 range -最常用

范围分区即根据指定的值范围进行分区,分区键常用日期。

--按照哪个列的哪个范围进行分区create table table_name()partition by range(分区列)(partition 分区1 values less than (值1),partition 分区2 values less than (值2),...partition 分区n values less than (maxvalue))说明:values less than 指定分区上限,每个分区除第一个分区外会有下限,即前一个分区的上限。如上语句所示,分区2的范围为[值1,值2).maxvalue 表示不确定的值,这个值高于其他任何分区或分区键的值。

2. 列表分区 list

如果某列的值只有几个,可以采用列表分区。如按emp表中的deptno

--按照哪个列的值进行分区create table table_name()partition by list (列)(partition 分区1 values(列值1),partition 分区2 values(列值2),...)

3. 散列分区 hash

根据字段的hash值进行分区,尽可能使数据均匀分布。具体分区由oracle决定。

create table table_name()partition by hash(列名)(partition 分区名1,partition 分区名2,...)

4. 组合分区

基于两种分区的组合,分区中的分区被称为子分区。

a. 范围-列表分区

--范围列表分区create table 表名()partition by range(列名1) subpartition by list(列名2)(partition 分区名1 values less than(值)(subpartition 子分区名 values (列值),...),partition 分区名2 values less than(值)(....))

b. 范围-散列分区

--范围散列分区create table table_name()partition by range(列1) subpartition by hash(列2,列3...)(partition 分区名1 values less than (值)(subpartition 子分区1,subpartition 子分区2,...),partition 分区名2 values less than (值)(......))

三、表分区的查询和维护

关于表分区的操作有:查询、添加、删除、截断、合并、拆分、重命名等。

除查询外,操作的具体语法与DDL语言类似,都以 alter table 开始。

--添加分区alter table 表 add parition 分区名 values less than(分界值)添加的分区界限须高于最后一个分区界限--删除分区alter table 表 drop partition 分区名;如果删除的分区是表中的唯一分区,那么分区不能删除,要想删除,必须先删除表。--截断分区alter table 表名 truncate partition 分区名;截断某个分区是指删除某个分区中的数据,并不会删除分区,也不会删除其它分区中的数据。但当表中即使只有一个分区时,也可以截断该分区。--合并分区alter table 表名 merge partition 分区名1,分区名2 into partition 分区名2;合并相邻分区成一个,结果分区将采用较高的分区界限,且不能合并到界限低的分区。--拆分分区alter table 表名 split partition 分区名 at(值) into (partition 分区1, partition 分区2);将一个分区拆为两个,拆分后原分区不再存在,不能对hash类型的分区进行拆分--重命名表分区alter table 表名 rename partition 原分区名 to 新分区名;--查询分区select * from 表名; 全表查询(包括所有分区)select * from 表名 partition(分区名1);