zoukankan      html  css  js  c++  java
  • Oracle 分区索引详解

    语法:

    Table Index
       CREATE [UNIQUE|BITMAP] INDEX [schema.]index_name
    ON [schema.]table_name [tbl_alias]
    (col [ASC | DESC]) index_clause index_attribs
    

    index_clauses:
    分以下两种情况

    1. Local Index

       就是索引信息的存放位置依赖于父表的Partition信息,换句话说创建这样的索引必须保证父表是Partition
    1.1 索引信息存放在父表的分区所在的表空间。但是仅可以创建在父表为HashTable或者composite分区表的。
        LOCAL STORE IN (tablespace)
    1.2 仅可以创建在父表为HashTable或者composite分区表的。并且指定的分区数目要与父表的分区数目要一致
    LOCAL STORE IN (tablespace)
      (PARTITION [partition
           [LOGGING|NOLOGGING]
           [TABLESPACE {tablespace|DEFAULT}]
           [PCTFREE int]
           [PCTUSED int]
           [INITRANS int]
           [MAXTRANS int]
           [STORAGE storage_clause]
           [STORE IN {tablespace_name|DEFAULT]
           [SUBPARTITION [subpartition [TABLESPACE tablespace]]]])
     
    1.3 索引信息存放在父表的分区所在的表空间,这种语法最简单,也是最常用的分区索引创建方式。
        Local
    1.4 并且指定的Partition 数目要与父表的Partition要一致 LOCAL (PARTITION [partition [LOGGING|NOLOGGING] [TABLESPACE {tablespace|DEFAULT}] [PCTFREE int] [PCTUSED int] [INITRANS int] [MAXTRANS int] [STORAGE storage_clause] [STORE IN {tablespace_name|DEFAULT] [SUBPARTITION [subpartition [TABLESPACE tablespace]]]])

    Global Index

      索引信息的存放位置与父表的Partition信息完全不相干。甚至父表是不是分区表都无所谓的。语法如下:
    GLOBAL PARTITION BY RANGE (col_list)
    ( PARTITION partition VALUES LESS THAN (value_list)
    [LOGGING|NOLOGGING]
    [TABLESPACE {tablespace|DEFAULT}]
    [PCTFREE int]
    [PCTUSED int]
    [INITRANS int]
    [MAXTRANS int]
    [STORAGE storage_clause] )
    但是在这种情况下,如果父表是分区表,要删除父表的一个分区都必须要更新Global Index ,否则索引信息不正确
    
    ALTER TABLE TableName DROP PARTITION PartitionName  Update Global Indexes
    本人没有深究过在什么情况下,哪种方式更有效。但是个人的感觉是简单的就是最好的
  • 相关阅读:
    菜根谭#298
    菜根谭#297
    菜根谭#296
    菜根谭#295
    菜根谭#294
    菜根谭#293
    菜根谭#292
    菜根谭#291
    菜根谭#290
    菜根谭#289
  • 原文地址:https://www.cnblogs.com/SharkXu/p/OracleLocalIndex.html
Copyright © 2011-2022 走看看