范围分区-最常见的分区方式
散列分区-
混合分区-
##############
# 范围分区 #
##############
create table range_example
(range_key_column date,
data varchar2(20)
)
partition by range(range_key_column)
(PARTITION part_1 values less than
(to_date('01-01-1995', 'dd-mm-yyyy')),
PARTITION part_2 values less than
(to_date('01-01-1996', 'dd-mm-yyyy'))
);
# 范围分区可以使用的关系
# 测试行移动
SQL> insert into range_example
2 values( to_date('01-01-1994', 'dd-mm-yyyy'), 'application data');
1 row inserted
SQL> update range_example
2 set range_key_column = range_key_column + 1;
1 row updated
正如所料
SQL> update range_example
2 set range_key_column = range_key_column + 366;
update range_example
set range_key_column = range_key_column + 366
ORA-14402: 更新分区关键字列将导致分区的更改
SQL> select rowid from range_example;
ROWID
------------------
AAAChiAAFAAADiYAAA
# 设置表允许行移动
SQL> alter table range_example enable row movement;
Table altered
SQL> update range_example
2 set range_key_column = range_key_column + 366;
1 row updated
SQL> select rowid from range_example;
ROWID
------------------
AAAChjAAFAAADigAAA
理解,这个行的ROWID值将随着这个更新而改变,因为从一个分区移动到另一个分区。
###############
# 散列分区 #
###############
散列分区的目的在于跨越许多不同的设备(磁盘),以取得良好的数据扩展性能。为了提供数值的良好扩展性能,为一个表选择的散列码应该是
尽可能惟一的一列或一组列。
create table hash_example
(hash_key_column date,
data varchar2(20)
)
PARTITION BY HASH(hash_key_column)
(partition part_1 tablespace p1,
partition part_2 tablespace p2
);
################
# 混合分区 #
################
create table composite_example
(range_key_column date,
hash_key_column int,
data varchar2(2)
)
PARTITION BY RANGE(range_key_column)
subpartition by hash(hash_key_column) subpartitions 2
(
PARTITION part_1
VALUES LESS THAN(to_date('01-01-1995', 'dd-mm-yyyy'))
(subpartition part_1_sub_1,
subpartition part_1_sub_2
),
PARTITION part_2
values less than(to_date('01-01-1996', 'dd-mm-yyyy'))
(subpartition part_2_sub_1,
subpartition part_2_sub_2
)
);
首先应用范围分区原则算出这些数据落入哪个范围,然后应用散列函数来决定数据最终放入哪个物理分区
在混合分区中,如果按范围分区码进行查询,Oracle能排除任何不符合标准的范围分区。
如果把散列码加入到查询中,Oracle能排除在那个范围内的其他散列分区。
如果只是按散列码进行查询(不使用范围分区码),Oracle将只从每个范围分区中查询那些适用的散列子分区。
阅读(1041) | 评论(0) | 转发(0) |