分区表(Partitioned object)

 

分区对象(Partitioned Object)


分区技术可以将数据库对象(数据表)数据按照规则进行划分,把不同的数据放到不同的分区中,分区对应用透明。

对于非分区表,只能存在于一个表空间中。但是,分区表可以存在于不同的表空间中。

在分区表内部是通过多个分区组成的,每个分区都会有自己的约束条件,并且一个分区只能存在于一个表空间中。

因此,也可以说是分区表中的不同分区可以存在于不同的表空间内。

分区对象的优点:


1. 数据加载与更新索引更加快捷;

2. 删除部分数据速度更快;

3. 全表扫描与索引查询更快;

4. 减少了数据损坏的可能性;

 

分区键(Partition Key)


分区键是划分数据表的一个基准。一般选择一列作为分区键(Partition Key Columns)。

分区列数据类型必须选择可以进行比较验算的类型(<,>,=)。

BINARY,GEOMETRY,BLOB,CLOB类型是不可以选做分区列的。

 

分区表(Partition Table)


分区表的概念类似于联合视图(Union View),但是它有以下两个优点:

1、数据可变更:分区表可以直接对数据进行操作,但是无法通过联合视图对数据进行操作。

2、创建索引:分区表可以创建索引,但是联合视图不可以。

分区表分为磁盘分区表与内存分区表两种类型。

 

分区索引(Partition Index)


针对于分区表使用的索引,可以分为两个类型:

1、分区索引与非分区索引:

分区索引按照分区条件以及与分区键有关的前缀索引(Prefixed Index)与非前缀索引(Non-prefixed Index)。

前缀索引:前缀索引中索引键的第一列与分区键的第一列一致;

非前缀索引:非前缀索引中索引键的第一列与分区键的第一列不一致;

区分方法:如果对一个分区表创建了一个分区索引。那么,分区键所在的列与分区索引指定的列如果一致,

那么,这样的索引叫做前缀索引;如果不一致,那么,这样的索引叫做非前缀索引。

目的:区分前缀与非前缀的目的,在于分区键所在的列具有唯一性(Unique)。

因此,针对前缀索引进行唯一性检查时,由于分区键的唯一特性,可以不需要对全部的分区进行检查。

但是,针对非前缀索引进行唯一性检查时,由于不是分区键所在列,需要对所有的分区进行唯一性检查。

2、分区索引:

分区索引按照类型分为全局分区索引(Global Index)与局部分区索引(Local Index)两种。

全局分区索引:索引分区键与表的分区键不一致时,这样的索引称之为全局分区索引。

局部分区索引:索引分区键与表的分区键一致时,这样的索引称之为局部分区索引。

区分方法:对一个分区表创建了一个分区索引。如果索引指定列与分区键所在列一致,创建局部分区索引;

如果索引指定列与分区键所在列不一致,创建全局分区索引。

目的:区分全局分区与局部分区索引,全局分区索引在分区表或数据发生变化时,意味着需要进行重建工作。

例如,(ALTER TABLE、MERGE等)。但是局部分区索引就不受影响。

 

 

分区条件(Partition Condition)


分区条件指的就是如何对数据进行划分的准则。

例如,对于一个分区表,按照条件划分了三个分区。

第一个分区条件为:Partition_condition1;

第二个分区条件为:Partition_condition2;

第三个分区条件为:默认条件;

 

分区方式(Partition Method)


分区表分区方式分为三种:区间(Range)、列表(List)、哈希(Hash)。

区间分区方式(Range Partitioning Method)


 

 使用此种分区方式时,大多数情况下按照日期进行分区操作(DATE)。

此方式结合LESS THAN关键词,对日期进行划分。使用DEFAULT表示默认的分区区间。

CREATE TABLE part_table
(
sales_date DATE,
sales_id NUMBER,
sales_city VARCHAR(20)
)
PARTITION BY RANGE(sales_date)
(
PARTITION part_1 VALUES LESS THAN ( TO_DATE(‘01-FEB-2006’) ),
PARTITION part_2 VALUES LESS THAN ( TO_DATE(‘01-MAR-2006’) ),
PARTITION part_3 VALUES LESS THAN ( TO_DATE(‘01-APR-2006’) ),
PARTITION part_def VALUES DEFAULT
) ;

 

多列区间分区(Multicolumn Partitioning Method)

多列区间分区指的是使用多个数据列进行区间划分对数据进行分区的方式。

 

CREATE TABLE part_table
(
sales_date DATE,
sales_id NUMBER,
sales_city VARCHAR(20),
....
)
PARTITION BY RANGE(sales_date, sales_id)
(
PARTITION part_1 VALUES LESS THAN ( TO_DATE(‘01-FEB-2006’), 200),
PARTITION part_2 VALUES LESS THAN ( TO_DATE(‘01-MAR-2006’), 100),
PARTITION part_3 VALUES LESS THAN ( TO_DATE(‘02-MAR-2006’)),
PARTITION part_4 VALUES LESS THAN ( TO_DATE(‘01-APR-2006’) ),
PARTITION part_def VALUES DEFAULT
) ;

 

区间分区操作(Range Partitioning Method)

1、分割分区

1)in-place 分割:新生成一个分区,将原有分区的数据移动到新分区中;

2)out-place 分割:新生成两个分区,将原有分区的数据分别移动到两个分区中;

 

2、删除分区:删除指定的分区,包括分区中的数据以及相关数据字典内容;

 

3、合并分区:

1)in-place Merge:不生成新分区,将一个分区数据合并到另一个分区中;

 

2)out-place Merge:生成新分区,将两个分区数据合并到新分区后,删除这两个分区;

 

4、重命名分区

5、删除分区数据

 

 

列表分区方式(List Partitioning Method)


使用此种分区方式时,按照分区键适用的集合为基准进行划分的。

例如,按照月份、地域等。

CREATE TABLE part_table
(
sales_date DATE,
sales_id NUMBER,
sales_city VARCHAR(20),
....
)
PARTITION BY LIST(sales_city)
(
PARTITION part_1 VALUES ( ‘BEIJING’ , ‘TIANJIN’ ),
PARTITION part_2 VALUES ( ‘SHANDONG’ , ‘ANHUI’ ),
PARTITION part_3 VALUES ( ‘CHENGDU’ , ‘WUHAN’ ),
PARTITION part_def VALUES DEFAULT
);

列表分区操作(List Partitioning Method)

1、分割分区

1)in-place 分割:新生成一个分区,将原有分区的数据移动到新分区中;

使用ALTER分割分区表时,不明确指定表空间情况下,使用的是in-place方式。

 

2)out-place分割:新生成两个分区,将原有分区的数据分别移动到两个分区中;

使用ALTER分割分区表时,明确指定表空间情况下,使用的是out-place方式。

 

2、删除分区:删除指定的分区,包括分区中的数据以及相关数据字典内容;

 

3、合并分区:

1)in-place Merge:不生成新分区,将一个分区数据合并到另一个分区中;

在使用ALTER语句中,不明确指定表空间的情况下,使用in-place方式;

2)out-place Merge:生成新分区,将两个分区数据合并到新分区后,删除这两个分区;

在使用ALTER语句中,明确指定表空间的情况下,使用out-place方式;

 

4、重命名分区

5、删除分区数据

 

哈希分区方式(Hash Partitioning Method)


使用此种分区方式时,使用分区键计算得出HASH值为基准进行划分的。

分区键可以指定多列

 

阿萨德

 

阿萨德

 

posted @ 2017-08-29 17:13  大尾巴狼R  阅读(911)  评论(0)    收藏  举报