oracle 怎么设置表分区

 有需要全网最全的java完整版面试资料+笔记的朋友点击这里免费获取

在Oracle数据库中,提供了多种分区方式来管理和划分表数据。以下是Oracle数据库中常见的几种分区类型:

  1. 范围分区 (Range Partitioning):

    • 按范围将数据划分到不同的分区中,通常基于某个列的范围值进行分区。
    • 例如:按日期范围、数值范围等进行分区。
  2. 列分区 (List Partitioning):

    • 根据列值的列表将数据划分到不同的分区中。
    • 例如:根据地区、部门等列值进行分区。
  3. 哈希分区 (Hash Partitioning):

    • 使用哈希算法将数据均匀地分布到不同的分区中。
    • 适用于均衡地分散数据负载的场景。
  4. 复合分区 (Composite Partitioning):

    • 将表数据同时使用两种或更多的分区方式进行划分。
    • 例如:先按范围分区,再在每个范围分区内按列表分区。
  5. 水平子分区 (Subpartitioning):

    • 在每个分区内进一步划分子分区。
    • 可以与范围分区、列表分区等结合使用。

分区表:
        将一张表通过某些条件分为几张表,以便提高查询速度和应用程序性能。逻辑上仍是一张整表。即将一筐水果分门别类的放在不同的篮子里,方便找。
二、类型及操作方法
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 表示不确定的值,这个值高于其他任何分区或分区键的值。

--按照哪个列的值进行分区

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

  有需要全网最全的java完整版面试资料+笔记的朋友点击这里免费获取 

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值