2010-12-07 113 views
7

除了显而易见之外,任何人都可以解释多列分区和使用子分区之间的不同之处吗?哪一个更适合OLTP场景?有关详细信息,请参见Oracle数据库管理员指南中的Managing Partitioned Tables and Indexes。在多个列上分区的表的Oracle多列分区与使用子分区

A(哑)的例子是:

CREATE TABLE demo1 
(
    year   NUMBER, 
    month   NUMBER, 
    day   NUMBER, 
    instance  NUMBER, /* assuming this can only be 1 or 2 */ 
    other1  VARCHAR2(50), 
    other2  VARCHAR2(50), 
    other3  VARCHAR2(50) 
) 
PARTITION BY RANGE (year,instance) 
(
    PARTITION data_2009_inst1 VALUES less than (2009,2) TABLESPACE data_2009, 
    PARTITION data_2009_inst2 VALUES less than (2009,3) TABLESPACE data_2009, 
    PARTITION data_2010_inst1 VALUES less than (2010,2) TABLESPACE data_2010, 
    PARTITION data_2010_inst2 VALUES less than (2010,3) TABLESPACE data_2010, 
    PARTITION data_2011_inst1 VALUES less than (2011,2) TABLESPACE data_2011, 
    PARTITION data_2011_inst2 VALUES less than (2011,3) TABLESPACE data_2011 
); 

类似地,示例的subpartitioned表的是:

CREATE TABLE demo2 
(
    year   NUMBER, 
    month   NUMBER, 
    day   NUMBER, 
    instance  NUMBER, /* assuming this can only be 1 or 2 */ 
    other1  VARCHAR2(50), 
    other2  VARCHAR2(50), 
    other3  VARCHAR2(50) 
) 
PARTITION BY RANGE (year) 
SUBPARTITION BY LIST (instance) /* Cannot subpartition by range in 10gR2 */ 
    SUBPARTITION template 
    (
     SUBPARTITION i1 VALUES (1), 
     SUBPARTITION i2 VALUES (2), 
     SUBPARTITION ix VALUES (DEFAULT) 
    ) 
(
    PARTITION data_2009 VALUES less than (2010) TABLESPACE data_2009, 
    PARTITION data_2010 VALUES less than (2011) TABLESPACE data_2010, 
    PARTITION data_2011 VALUES less than (2012) TABLESPACE data_2011 
); 

现在是什么这些表之间的差异?他们不是“逻辑上”吗?我知道将分区添加到demo2要容易得多,因为您需要在demo1上拆分分区,以便随着时间的推移获取更多分区。 OLTP场景中哪个更好?

在附注中,我在INSTANCE编号上进行分区的原因与Oracle RAC有关。我试图创建一个“实例关联”来阻止“热块”放慢数据库,因为这些需要通过RAC节点之间的互连发送。 (我们经验证明,这对我们的测试确实有所帮助)。

回答

2

你的情况可能没有什么区别,但是通常子分区允许你以2种不同的方式进行分区,比如范围散列,范围列表。您的子分区示例是范围列表,但等效于单级范围分区。但是,你不能使用单级,如果你的子分区是这样的例子从DOC你链接:

子分区的
ALTER TABLE quarterly_regional_sales 
    ADD PARTITION q1_2000 VALUES LESS THAN (TO_DATE('1-APR-2000','DD-MON-YYYY')) 
     STORAGE (INITIAL 20K NEXT 20K) TABLESPACE ts3 NOLOGGING 
     (
      SUBPARTITION q1_2000_northwest VALUES ('OR', 'WA'), 
      SUBPARTITION q1_2000_southwest VALUES ('AZ', 'UT', 'NM'), 
      SUBPARTITION q1_2000_northeast VALUES ('NY', 'VM', 'NJ'), 
      SUBPARTITION q1_2000_southeast VALUES ('FL', 'GA'), 
      SUBPARTITION q1_2000_northcentral VALUES ('SD', 'WI'), 
      SUBPARTITION q1_2000_southcentral VALUES ('OK', 'TX') 
     ); 
0

一个优点是它们允许子的个体精细管理-partitions。例如,在数据归档表中,可以说不仅保留日期不同,还有其他值。

使用您的示例,或许您需要在7年内保持value instance = 1的数据,但实例= 2的数据可以在4年后丢弃。子分区将允许您删除包含instance = 2的数据的子分区,而与其他值无关。