Oracle 10g 读书笔记之分区

本文深入探讨了Oracle数据库中分区技术的四种实现方式:区间分区、散列分区、列表分区及组合分区,以及如何通过行移动调整数据分布。此外,文章还介绍了如何在表和索引上进行分区,包括局部分区索引和全局分区索引的区别。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

分区是将一个表或索引物理地分解为多个更小、更可管理的部分。它是 oracle 企业版的一个选项,不过要另行收费。标准版中没有这个特性。

oracle 有四种对表分区的方法:
1、区间分区:可指定应当存储在一起的数据区间。例如相同年份的数据存储在一个分区中。
创建语句:CREATE TABLE table_name(col_name ...) PARTITION BY RANGE (col_name)
(PARTITION p1 VALUES LESS THAN v1 tablespace t1,
PARTITION p2 VALUES LESS THAN v2 tablespace t2, PARTITION pn VALUES LESS THAN MAXVALUE tablespace t3)

2、散列分区:指在一个列(或多个列)上应用一个散列函数,行会按这个散列值放在某个分区中。
创建语句:CREATE TABLE table_name(col_name ...) PARTITION BY HASH (col_name) (PARTITION p1, PARTITION p2)

3、列表分区:指定一个离散值集,来确定应当存储在一起的数据。
创建语句:CREATE TABLE table_name(col_name ...) PARTITION BY LIST (col_name)
(PARTITION p1 VALUES (v1,V2,V3), PARTITION p2 VALUES (v4,V5,V6), PARTITION pn VALUES (DEFAULT))

4、组合分区:这是区间分区和散列分区的一种组合,或者是区间分区与列表分区的组合。顶层分区机制总是区间分区。
创建散列子分区语句:CREATE TABLE table_name(col_name ...) PARTITION BY RANGE (col_name)
SUBPARTITION BY HASH (col_name) SUBPARTITIONS 2
(
PARTITION p1 VALUES LESS THAN v1 (subpartition p1_sub1, subpartition p1_sub2),
PARTITION p2 VALUES LESS THAN v2 (subpartition p2_sub1, subpartition p2_sub2)
)
创建列表子分区语句:CREATE TABLE table_name(col_name ...) PARTITION BY RANGE (col_name)
SUBPARTITION BY LIST (col_name)
(
PARTITION p1 VALUES LESS THAN v1 (subpartition p1_sub1 VALUES (v1,V2,V3), subpartition p1_sub2 VALUES (v4,V5,V6)),
PARTITION p2 VALUES LESS THAN v2 (subpartition p2_sub1 VALUES (v1,V2,V3), subpartition p2_sub2 VALUES (v4,V5,V6))
)

行移动:数据的修改会导致行跨分区移动。只有当表启用了行移动时才支持这种情况,否则会报错。同时更新时行的 ROWID 会改变。
启动行移动:ALTER TABLE table_name ENABLE ROW MOVEMENT;

索引与表类似,也可以分区。对索引进行分区有两种可能的方法:
1、随表对索引完成相应的分区:这也称为局部分区索引。每个表分区都有一个索引分区,而且只索引该表分区。
创建语句:CREATE INDEX index_name on table_name(col_name) LOCAL;

2、按区间对索引分区:这也称为全局分区索引。索引按区间分区(或者 10g 中还可以按散列分区),一个索引分区可能指向任何表分区。
创建语句:CREATE INDEX index_name on table_name(col_name) GLOBAL
PARTITION BY RANGE(col_name)
(
PARTITION p1 VALUES LESS THAN v1,
PARTITION p2 VALUES LESS THAN v2
)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值