一、分区的特征
1、partition key
分区键,是指用来设置分区的一个或多个列。
2、partition strategies
分区策略,是指控制数据库如何把数据放进分区里面。
2.1、Range Partitioning:顾名思义,根据分区键的范围确定数据行在哪一个分区里。如:
CREATE TABLE time_range_sales
( prod_id NUMBER(6)
, cust_id NUMBER
, time_id DATE
, channel_id CHAR(1)
, promo_id NUMBER(6)
, quantity_sold NUMBER(3)
, amount_sold NUMBER(10,2)
)
PARTITION BY RANGE ( time_id)
(PARTITION SALES_1998 VALUES LESS THAN (TO_DATE('01-JAN-1999','DD-MON-YYYY')),
PARTITION SALES_1999 VALUES LESS THAN (TO_DATE('01-JAN-2000','DD-MON-YYYY')),
PARTITION SALES_2000 VALUES LESS THAN (TO_DATE('01-JAN-2001','DD-MON-YYYY')),
PARTITION SALES_2001 VALUES LESS THAN (MAXVALUE)
);
2.2、List Partitioning:顾名思义,相同的单独值存放在指定的分区。如:
CREATE TABLE list_sales
( prod_id NUMBER(6)
, cust_id NUMBER
, time_id DATE
, channel_id CHAR(1)
, promo_id NUMBER(6)
, quantity_sold NUMBER(3)
, amount_sold NUMBER(10,2)
)
PARTITION BY LIST (channel_id )
(PARTITION even_channels VALUES (2,4),
PARTITION odd_channels VALUES (3,9)
);
2.3、Hash Partitioning:根据一个内部的散列算法,把输入值映射到特定的分区中。如:
CREATE TABLE hash_sales
( prod_id NUMBER(6)
, cust_id NUMBER
, time_id DATE
, channel_id CHAR(1)
, promo_id NUMBER(6)
, quantity_sold NUMBER(3)
, amount_sold NUMBER(10,2)
)
PARTITION BY HASH (prod_id)
PARTITIONS 2;
二、分区的类型
2.1、分区表
2.2、分区索引.索引从分区的角度,可以分为以下类型:
2.2.1、Local Partitioned Indexes
Local Partitioned Indexes依赖于所定义的表,跟表分区拥有相同的分区数量、相同的列、相同的绑定。同时,各个分区之间具有相对的独立性,如果其中一个分区发生改变,只会影响到该分区。你不能显示地删除子分区索引或往分区索引中添加分区,这些只能对表子分区进行改变,进而影响到索引分区。当然,该局部索引也可以是位图索引。
如果SQL语句中的WHERE中包含了分区键列,则数据库就会根据该语句中的键列识别分区,而忽略其他分区。这叫 partition elimination (或 partition pruning )。
另外,局部分区索引还分为Local prefixed indexes和Local nonprefixed indexes两种。Local prefixed indexes表示分区键将会在索引定义的头部。
实例:CREATE INDEX hash_sales_idx ON hash_sales(time_id) LOCAL;
2.2.2、Global Partitioned
全局分区索引,是独立于所在表分区的的索引分区,一个全局索引分区可以指向多个表分区。全局分区索引不能是位图索引,其可以采用range或hash的分区策略。实例:
CREATE INDEX time_channel_sales_idx ON time_range_sales ( channel_id )
GLOBAL PARTITION BY RANGE ( channel_id )
(PARTITION p1 VALUES LESS THAN (3),
PARTITION p2 VALUES LESS THAN (4),
PARTITION p3 VALUES LESS THAN (MAXVALUE));
3.Partitioned Index-Organized Tables
你可以采用三种策略来对索引组织表来进行分区,需要注意的是:
- 分区键必须是主键的子集;
- secondary index可以是局部的,也可以是全局的;
- OVERFLOW指定的溢出区必须跟表分区一样。
对于索引组织表来说,位图索引都支持,不管其是否分区。
---------------------------------------------------------------------------------------------------
如有错误,欢迎指正
技术交流QQ:1732035211
技术交流邮箱:1732035211@qq.com
新浪微博:数据库小菜鸟http://weibo.com/u/3132578390