Oracle数据库的子分区索引

时间:2017-01-18 10:58:47

标签: sql oracle indexing database-partitioning

我在表上创建了一个复合的Range-List分区,该分区遵循以下示例代码。

CREATE TABLE sample_regional_sales
      (deptno number, item_no varchar2(20),
       txn_date date, txn_amount number, state varchar2(2))
  PARTITION BY RANGE (txn_date)
    SUBPARTITION BY LIST (state)
      (PARTITION q1_1999 VALUES LESS THAN (TO_DATE('1-APR-1999','DD-MON-YYYY'))
          TABLESPACE tbs_1
         (SUBPARTITION q1_1999_northwest VALUES ('OR', 'WA'),
          SUBPARTITION q1_others VALUES (DEFAULT) TABLESPACE tbs_4
         ),
       PARTITION q2_1999 VALUES LESS THAN ( TO_DATE('1-JUL-1999','DD-MON-YYYY'))
          TABLESPACE tbs_2
         (SUBPARTITION q2_1999_northwest VALUES ('OR', 'WA'),
          SUBPARTITION q2_1999_southcentral VALUES ('OK', 'TX')
         ),
       PARTITION q3_1999 VALUES LESS THAN (TO_DATE('1-OCT-1999','DD-MON-YYYY'))
          TABLESPACE tbs_3
         (SUBPARTITION q3_1999_northwest VALUES ('OR', 'WA'),
          SUBPARTITION q3_others VALUES (DEFAULT) TABLESPACE tbs_4
         ),
       PARTITION q4_1999 VALUES LESS THAN ( TO_DATE('1-JAN-2000','DD-MON-YYYY'))
          TABLESPACE tbs_4
      );

我能够在范围分区上创建一个索引:

create index SOME_INDEX_NAME on sample_regional_sales (txn_date) global
    PARTITION by range (txn_date)
    (
    PARTITION q1_1999 VALUES LESS THAN (TO_DATE('1-APR-1999','DD-MON-YYYY')),
    PARTITION q2_1999 VALUES LESS THAN (TO_DATE('1-JUL-1999','DD-MON-YYYY')),
    PARTITION q3_1999 VALUES LESS THAN (TO_DATE('1-OCT-1999','DD-MON-YYYY')),
    PARTITION q3_1999 VALUES LESS THAN (TO_DATE('1-NOV-1999','DD-MON-YYYY'))
    PARTITION year_after VALUES LESS THAN (MAXVALUE)
    );

我无法找到的是,是否有办法在子分区中添加索引。

目前,我在日期列(我想要删除)上有一个索引,但在状态分区上却没有。

简而言之,有没有办法在子分区上创建索引?

1 个答案:

答案 0 :(得分:0)

我想说创建不同于表分区的索引分区是相当罕见的。

通常你创建一个全局索引

create index SOME_INDEX_NAME on sample_regional_sales (txn_date) global;

或您制作本地索引:

create index SOME_INDEX_NAME on sample_regional_sales (txn_date) local;

由此,每个表(子)分区自动获得相应的索引分区。

按照您的方式创建索引

create index SOME_INDEX_NAME on sample_regional_sales (txn_date) global
    PARTITION by range (txn_date)
    (
    PARTITION q1_1999 VALUES LESS THAN (TO_DATE('1-APR-1999','DD-MON-YYYY')),
    ...
    );

索引是在子分区中创建的。分区只是一组子分区。

语句"目前我有一个关于州列的索引,但没有关于状态分区的索引。"没有任何意义。您可以在整个表的列上定义索引。该索引可以在几个物理部分中划分(即分区)。