这是对 Range-Hash 分区的正确解释吗?
Is this a correct explanation of a Range-Hash partition?
CREATE TABLE 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) SUBPARTITION BY HASH (cust_id)
SUBPARTITIONS 8 STORE IN (ts1, ts2, ts3, ts4)
( PARTITION sales_q1_2006 VALUES LESS THAN (TO_DATE('01-APR-2006','dd-MON-yyyy'))
, PARTITION sales_q2_2006 VALUES LESS THAN (TO_DATE('01-JUL-2006','dd-MON-yyyy'))
, PARTITION sales_q3_2006 VALUES LESS THAN (TO_DATE('01-OCT-2006','dd-MON-yyyy'))
, PARTITION sales_q4_2006 VALUES LESS THAN (TO_DATE('01-JAN-2007','dd-MON-yyyy'))
);
在上面的示例中,创建了一个范围散列分区并将数据库拆分为四个部分,ts1、ts2、ts3、ts4。然后创建一个范围分区,将每个销售季度的数据分成四个部分(ts1、ts2、ts3、ts4)。即使将销售季度拆分为for分区(ts1、ts2、ts3、ts4),这些数据又进一步拆分为8个子分区?
如果有帮助,这是我用于示例的网站:https://docs.oracle.com/database/121/VLDBG/GUID-A596B6B1-62C7-4701-A872-BDC5632CEE43.htm
谢谢
差不多。我发现这个例子实际上很混乱,在理解它之前必须对其进行测试。
table 拆分为部分 sales_q1_2006 ... sales_q4_2006。 2006 年第一季度的 time_id
位于分区 sales_q1_2006 中,依此类推。每个分区都根据列 cust_id
的哈希值拆分为 8 个子分区。
现在,(ts1, ts2, ts3, ts4)
位。 8个子分区用8个table空格比较好理解:
SUBPARTITIONS 8 STORE IN (ts1, ts2, ts3, ts4, ts5, ts6, ts7, ts8)
如果创建 table,8 个子分区中的每一个都存储在单独的 table 空间中:
SELECT partition_position AS pos, partition_name, subpartition_name, tablespace_name
FROM USER_TAB_SUBPARTITIONS
ORDER BY table_name, partition_position, subpartition_name;
POS PARTITION SUBPARTITION TABLESPACE
1 SALES_Q1_2006 SYS_SUBP525 TS1
1 SALES_Q1_2006 SYS_SUBP526 TS2
1 SALES_Q1_2006 SYS_SUBP527 TS3
1 SALES_Q1_2006 SYS_SUBP528 TS4
1 SALES_Q1_2006 SYS_SUBP529 TS5
1 SALES_Q1_2006 SYS_SUBP530 TS6
1 SALES_Q1_2006 SYS_SUBP531 TS7
1 SALES_Q1_2006 SYS_SUBP532 TS8
2 SALES_Q2_2006 SYS_SUBP533 TS1
2 SALES_Q2_2006 SYS_SUBP534 TS2
2 SALES_Q2_2006 SYS_SUBP535 TS3
...
因此,所有分区的第一个哈希子分区存储在table空间ts1中,所有分区的第二个哈希子分区存储在table空间ts2中,依此类推,直到table空间 ts8.
回到你的例子,有 4 个 table 空间名称和 8 个子分区:四个指定的 table 空间 ts1 到 ts4 只是循环直到所有子分区都有一个 table空间。在您的示例中,8 个子分区转到 table 空间 ts1、ts2、ts3、ts4、ts1、ts2、ts3 和 ts4:
SELECT partition_position AS pos, partition_name, subpartition_name, tablespace_name
FROM USER_TAB_SUBPARTITIONS
ORDER BY table_name, partition_position, subpartition_name;
POS PARTITION SUBPARTITION TABLESPACE
1 SALES_Q1_2006 SYS_SUBP589 TS1 <= first cycle
1 SALES_Q1_2006 SYS_SUBP590 TS2
1 SALES_Q1_2006 SYS_SUBP591 TS3
1 SALES_Q1_2006 SYS_SUBP592 TS4
1 SALES_Q1_2006 SYS_SUBP593 TS1 <= next cycle
1 SALES_Q1_2006 SYS_SUBP594 TS2
1 SALES_Q1_2006 SYS_SUBP595 TS3
1 SALES_Q1_2006 SYS_SUBP596 TS4
2 SALES_Q2_2006 SYS_SUBP597 TS1 <= next partition
2 SALES_Q2_2006 SYS_SUBP598 TS2
2 SALES_Q2_2006 SYS_SUBP599 TS3
...
CREATE TABLE 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) SUBPARTITION BY HASH (cust_id)
SUBPARTITIONS 8 STORE IN (ts1, ts2, ts3, ts4)
( PARTITION sales_q1_2006 VALUES LESS THAN (TO_DATE('01-APR-2006','dd-MON-yyyy'))
, PARTITION sales_q2_2006 VALUES LESS THAN (TO_DATE('01-JUL-2006','dd-MON-yyyy'))
, PARTITION sales_q3_2006 VALUES LESS THAN (TO_DATE('01-OCT-2006','dd-MON-yyyy'))
, PARTITION sales_q4_2006 VALUES LESS THAN (TO_DATE('01-JAN-2007','dd-MON-yyyy'))
);
在上面的示例中,创建了一个范围散列分区并将数据库拆分为四个部分,ts1、ts2、ts3、ts4。然后创建一个范围分区,将每个销售季度的数据分成四个部分(ts1、ts2、ts3、ts4)。即使将销售季度拆分为for分区(ts1、ts2、ts3、ts4),这些数据又进一步拆分为8个子分区?
如果有帮助,这是我用于示例的网站:https://docs.oracle.com/database/121/VLDBG/GUID-A596B6B1-62C7-4701-A872-BDC5632CEE43.htm
谢谢
差不多。我发现这个例子实际上很混乱,在理解它之前必须对其进行测试。
table 拆分为部分 sales_q1_2006 ... sales_q4_2006。 2006 年第一季度的 time_id
位于分区 sales_q1_2006 中,依此类推。每个分区都根据列 cust_id
的哈希值拆分为 8 个子分区。
现在,(ts1, ts2, ts3, ts4)
位。 8个子分区用8个table空格比较好理解:
SUBPARTITIONS 8 STORE IN (ts1, ts2, ts3, ts4, ts5, ts6, ts7, ts8)
如果创建 table,8 个子分区中的每一个都存储在单独的 table 空间中:
SELECT partition_position AS pos, partition_name, subpartition_name, tablespace_name
FROM USER_TAB_SUBPARTITIONS
ORDER BY table_name, partition_position, subpartition_name;
POS PARTITION SUBPARTITION TABLESPACE
1 SALES_Q1_2006 SYS_SUBP525 TS1
1 SALES_Q1_2006 SYS_SUBP526 TS2
1 SALES_Q1_2006 SYS_SUBP527 TS3
1 SALES_Q1_2006 SYS_SUBP528 TS4
1 SALES_Q1_2006 SYS_SUBP529 TS5
1 SALES_Q1_2006 SYS_SUBP530 TS6
1 SALES_Q1_2006 SYS_SUBP531 TS7
1 SALES_Q1_2006 SYS_SUBP532 TS8
2 SALES_Q2_2006 SYS_SUBP533 TS1
2 SALES_Q2_2006 SYS_SUBP534 TS2
2 SALES_Q2_2006 SYS_SUBP535 TS3
...
因此,所有分区的第一个哈希子分区存储在table空间ts1中,所有分区的第二个哈希子分区存储在table空间ts2中,依此类推,直到table空间 ts8.
回到你的例子,有 4 个 table 空间名称和 8 个子分区:四个指定的 table 空间 ts1 到 ts4 只是循环直到所有子分区都有一个 table空间。在您的示例中,8 个子分区转到 table 空间 ts1、ts2、ts3、ts4、ts1、ts2、ts3 和 ts4:
SELECT partition_position AS pos, partition_name, subpartition_name, tablespace_name
FROM USER_TAB_SUBPARTITIONS
ORDER BY table_name, partition_position, subpartition_name;
POS PARTITION SUBPARTITION TABLESPACE
1 SALES_Q1_2006 SYS_SUBP589 TS1 <= first cycle
1 SALES_Q1_2006 SYS_SUBP590 TS2
1 SALES_Q1_2006 SYS_SUBP591 TS3
1 SALES_Q1_2006 SYS_SUBP592 TS4
1 SALES_Q1_2006 SYS_SUBP593 TS1 <= next cycle
1 SALES_Q1_2006 SYS_SUBP594 TS2
1 SALES_Q1_2006 SYS_SUBP595 TS3
1 SALES_Q1_2006 SYS_SUBP596 TS4
2 SALES_Q2_2006 SYS_SUBP597 TS1 <= next partition
2 SALES_Q2_2006 SYS_SUBP598 TS2
2 SALES_Q2_2006 SYS_SUBP599 TS3
...