oracle 表分区详解

目录

一、概念

二、类型及操作方法

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);

你可能感兴趣的:(数据分析:从入门到放弃,oracle,数据库)