您的位置:首页 > 数据库 > Oracle

Oracle 分区索引详解

2006-09-05 18:13 661 查看

语法:

TableIndex
CREATE[UNIQUE|BITMAP]INDEX[schema.]index_name
ON[schema.]table_name[tbl_alias]
(col[ASC|DESC])index_clauseindex_attribs

index_clauses:
分以下两种情况

1.LocalIndex

就是索引信息的存放位置依赖于父表的Partition信息,换句话说创建这样的索引必须保证父表是Partition

1.1索引信息存放在父表的分区所在的表空间。但是仅可以创建在父表为HashTable或者composite分区表的。

LOCALSTOREIN(tablespace)

1.2仅可以创建在父表为HashTable或者composite分区表的。并且指定的分区数目要与父表的分区数目要一致
LOCALSTOREIN(tablespace)
(PARTITION[partition
[LOGGING|NOLOGGING]
[TABLESPACE{tablespace|DEFAULT}]
[PCTFREEint]
[PCTUSEDint]
[INITRANSint]
[MAXTRANSint]
[STORAGEstorage_clause]
[STOREIN{tablespace_name|DEFAULT]
[SUBPARTITION[subpartition[TABLESPACEtablespace]]]])


1.3索引信息存放在父表的分区所在的表空间,这种语法最简单,也是最常用的分区索引创建方式。

Local

1.4并且指定的Partition数目要与父表的Partition要一致
LOCAL(PARTITION[partition
[LOGGING|NOLOGGING]
[TABLESPACE{tablespace|DEFAULT}]
[PCTFREEint]
[PCTUSEDint]
[INITRANSint]
[MAXTRANSint]
[STORAGEstorage_clause]
[STOREIN{tablespace_name|DEFAULT]
[SUBPARTITION[subpartition[TABLESPACEtablespace]]]])

GlobalIndex

索引信息的存放位置与父表的Partition信息完全不相干。甚至父表是不是分区表都无所谓的。语法如下:GLOBALPARTITIONBYRANGE(col_list)
(PARTITIONpartitionVALUESLESSTHAN(value_list)
[LOGGING|NOLOGGING]
[TABLESPACE{tablespace|DEFAULT}]
[PCTFREEint]
[PCTUSEDint]
[INITRANSint]
[MAXTRANSint]
[STORAGEstorage_clause])

但是在这种情况下,如果父表是分区表,要删除父表的一个分区都必须要更新GlobalIndex,否则索引信息不正确
[code]ALTERTABLETableNameDROPPARTITIONPartitionNameUpdateGlobalIndexes

本人没有深究过在什么情况下,哪种方式更有效。但是个人的感觉是简单的就是最好的

[/code]
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: