除了顯而易見之外,任何人都可以解釋多列分區和使用子分區之間的不同之處嗎?哪一個更適合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節點之間的互連發送。 (我們經驗證明,這對我們的測試確實有所幫助)。