除了显而易见的,有人可以解释多列分区和使用子分区之间有什么不同吗?哪一个更适合OLTP场景?有关详细信息,请参阅“Oracle数据库管理员指南”中的Managing Partitioned Tables and Indexes。
在多列上分区的表的一个(哑)示例是:
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
);
类似地,子分区表的示例是:
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节点之间的互连发送。 (我们已经凭经验证明这确实对我们的测试产生了影响)。
答案 0 :(得分:2)
在您的情况下可能没有任何区别,但通常子分区允许您以两种不同的方式进行分区,例如range-hash,range-list。您的子分区示例是范围列表,但等效于单级范围分区。但是,如果您的子分区与您链接的文档中的此示例类似,则无法使用单级:
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')
);
答案 1 :(得分:0)
子分区的一个优点是它们允许对子分区进行单独的细粒度管理。例如,在数据存档表中,可以说不仅基于日期而且基于另一个值存在不同的保留要求。
使用您的示例可能需要将值实例= 1的数据保留7年,但实例= 2的数据可在4年后丢弃。子分区允许您删除包含instance = 2的数据的子分区,而与其他值无关。