垂直分区:子表上的列是主表上列的子集,应用场景较少(这里不做详细说明)。
水平分区:子表跟主表具有相同的逻辑结构,即分区子表与分区主表有相同的列定义和约束定义。
水平分区类型:范围分区,列表分区,哈希分区,间隔分区
范围分区:要求:分区列是数字或是日期类型。
每一个分区都必须有一个 VALUES LESS THAN 子句,它指定了一个不包括在该分区中的上限值。分区键的任何值等于或者大于这个上限值的记录都会被加入到下一个高一些的分区中。所有分区,除了第一个,都会有一个隐式的下限值,这个值就是此分区的前一个分区的上限值。
列表分区:分区列适合字符串类型
通过指定表中的某个列的离散值集,来确定应当存储在一起的数据。分区的特点是某列的值只有几个,基于这样的特点我们可以采用列表分区。
Hash 分区:HASH存数据非常快,取数据慢,数据平均分配各个子分区。
如果 hash 分区不指定分区表名,那就通过指定哈希的分区数来创建,分区表名统一使用 DMHASHPART+分区号(从 0 开始)作为分区名。
分区是在列值上使用散列算法,以确定将行放入哪个分区中。当列的值没有合适的条件时,建议使用散列分区。散列分区为通过指定分区编号来均匀分布数据的一种分区类型,因为通过在 I/O 设备上进行散列分区,使得这些分区大小一致。建议分区的数量采用 2 的 n 次方,这样可以使得各个分区间数据分布更加均匀。
间隔分区:实际上是范围分区的一个扩展
间隔分区(interval partitioning)它就是以一个区间分区表为“起点”,并在定义中增加了一个规则(即间隔),使数据库知道将来如何增加分区,在数据插入的时候,如果没有适合该数据的分区,数据库会自动创建一个新的分区。
分区表的维护
数据字典:DBA_TAB_PARTITIONS
可以通过该视图查询分区表的信息
1、增加分区
ALTER TABLE TAB_RANGE ADD PARTITION PN VALUES LESS THAN(MAXVALUE);
2、删除分区
ALTER TABLE TAB_RANGE DROP PARTITION PN;
3、合并分区
ALTER TABLE TAB_RANGE MERGE PARTITIONS P1,P2 INTO PARTITION P1_2;
4、拆分分区
ALTER TABLE TAB_RANGE SPLIT PARTITION P1_2 AT (100) INTO (PARTITION P1,PARTITION P2);
5、互换分区
ALTER TABLE TAB_RANGE EXCHANGE PARTITION P1 WITH TABLE TAB_TEST;
交换时,会把普通表的数据全部交换过来,包括不属于这个分区的数据也会一起交换过来,所以在交换分区的时候,普通表的数据需要先整
社区地址:https://eco.dameng.com