索引一个范围分区 Oracle

Indexing a ranged partition Oracle

我想为我的 table 的一个分区编制索引,我不知道该怎么做,而且我无权访问我的数据库 atm。

数据库是Oracle 11。 我的代码可以工作吗?

CREATE TABLE MARKET.PARTTABLE
(
  EXTRACT_DATE   DATE                   NOT NULL,
  LOAD_ID    NUMBER(10)                 NOT NULL,
  LOAD_DATE  DATE                       NOT NULL,
  NAME  VARCHAR2(200 BYTE)              NOT NULL
)
PARTITION BY RANGE (EXTRACT_DATE)
(   
    PARTITION PDEFAULT VALUES LESS THAN (MAXVALUE)
    NOLOGGING
    NOCOMPRESS 
    TABLESPACE MARKET_DAT
    PCTFREE    0
    INITRANS   1
    MAXTRANS   255
    STORAGE    (
                MAXSIZE          UNLIMITED
                BUFFER_POOL      DEFAULT
                FLASH_CACHE      DEFAULT
                CELL_FLASH_CACHE DEFAULT
               )
CREATE INDEX NAME_PARTTABLE ON PARTTABLE(NAME)
)
NOCACHE
NOPARALLEL
MONITORING;

当我 运行 时,出现以下错误:

ORA-14020: this physical attribute may not be specified for a table partition

这表明我遇到了格式问题,但实际上我没有找到任何对索引分区有用的文档(或者我太笨了,无法理解它们)。

编辑: 我试过这个:

CREATE TABLE MARKET.PARTTABLE
(
  EXTRACT_DATE   DATE                   NOT NULL,
  LOAD_ID    NUMBER(10)                 NOT NULL,
  LOAD_DATE  DATE                       NOT NULL,
  NAME  VARCHAR2(200 BYTE)              NOT NULL
)
PARTITION BY RANGE (EXTRACT_DATE)
(   
    PARTITION PDEFAULT VALUES LESS THAN (MAXVALUE)
    NOLOGGING
    NOCOMPRESS 
    TABLESPACE MARKET_DAT
    PCTFREE    0
    INITRANS   1
    MAXTRANS   255
    STORAGE    (
                MAXSIZE          UNLIMITED
                BUFFER_POOL      DEFAULT
                FLASH_CACHE      DEFAULT
                CELL_FLASH_CACHE DEFAULT
               )
)
NOCACHE
NOPARALLEL
MONITORING;
CREATE INDEX NAME_PARTTABLE ON PARTTABLE(NAME)

有效,但我不确定索引现在是在分区上还是在整个分区上 table。有人可以帮我吗?

您的第二个语句实际上并未在分区上创建 INDEX。 分区索引应定义为 LOCALGLOBAL.

由于您要创建的是 非前缀索引(索引的最左边的列不是分区键),更好的选择是去LOCAL INDEX

CREATE INDEX NAME_PARTTABLE ON PARTTABLE(NAME) LOCAL;

..but I'm not sure if the index is now on the partition or if it is on the whole table.

您可以查询数据字典视图 ALL_PART_INDEXESUSER_PART_INDEXES 来检查您的索引名称。这些视图不显示正常的非分区索引。

select * from USER_PART_INDEXES where index_name='NAME_PARTTABLE';

Partitioned Tables And Indexes