除了显而易见之外,任何人都可以解释多列分区和使用子分区之间的不同之处吗?哪一个更适合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节点之间的互连发送。 (我们经验证明,这对我们的测试确实有所帮助)。