索引一个范围分区 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
。
分区索引应定义为 LOCAL
或 GLOBAL
.
由于您要创建的是 非前缀索引(索引的最左边的列不是分区键),更好的选择是去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_INDEXES
或 USER_PART_INDEXES
来检查您的索引名称。这些视图不显示正常的非分区索引。
select * from USER_PART_INDEXES where index_name='NAME_PARTTABLE';
我想为我的 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
。
分区索引应定义为 LOCAL
或 GLOBAL
.
由于您要创建的是 非前缀索引(索引的最左边的列不是分区键),更好的选择是去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_INDEXES
或 USER_PART_INDEXES
来检查您的索引名称。这些视图不显示正常的非分区索引。
select * from USER_PART_INDEXES where index_name='NAME_PARTTABLE';