你可以把表在线重定义成分区表 然后再加索引 分区表,分区索引 ,普通表,普通索引可以相互组合:一个非分区表可以有分区或非分区索引一个分区表也可以有分区或非分区索引细化来讲索引的分类:1、global2、local,它又分成2类:2.1、prefix:索引的第一个列等于表的分区列。2.2、non-pre...显示全部
你可以把表在线重定义成分区表 然后再加索引
分区表,分区索引 ,普通表,普通索引可以相互组合:
一个非分区表可以有分区或非分区索引
一个分区表也可以有分区或非分区索引
细化来讲
索引的分类:
1、global
2、local,它又分成2类:
2.1、prefix:索引的第一个列等于表的分区列。
2.2、non-prefix:索引的第一个列不等于表的分区列
所以一共有三类分区索引:
global + prefix
–global + nonprefix: 不支持
local + prefix
local + nonprefix
然而每一种的特点:
local分区索引使用与底层表相同的机制分区;global分区索引使用与底层表不同的机制进行分区,索引按区间或散列对索引进行分区,一个全局索引分区可能指向任何表分区或所有表分区。
对于local索引,每一个表分区对应一个索引分区,当表的分区发生变化时,索引的维护由Oracle自动进行。
对于global索引,可以选择是否分区,而且索引的分区可以不与表分区相对应。
当对分区进行DDL时,通常会导致全局索引的INVALID,必须在执行完操作后REBUILD。
局部索引比全局索引容易管理,而全局索引比较快。
局部索引多应用于数据仓库环境中,而全局索引多应用于oltp系统中
global索引分为两种:range (一定要有maxvalue的分区)和hash。
CREATE INDEX idx ON emp ( first_name )
GLOBAL PARTITION BY RANGE ( first_name )
( PARTITION x1 VALUES LESS THAN ( ‘H’ )
TABLESPACE users
, PARTITION x2 VALUES LESS THAN ( MAXVALUE )
) ;
local的可以指定表空间 也可以不指定
CREATE INDEX idx ON hr_emp( first_name )
LOCAL ;
或
CREATE INDEX idx ON hr_emp( first_name )
TABLESPACE indx04
LOCAL
( PARTITION ex1 TABLESPACE indx01
, PARTITION ex2 TABLESPACE indx02
, PARTITION ex3
);
上面已经说过 当做DDL时索引会UNUSABLE
(local的只有被DDL的分区UNUSABLE global或者非分区的则是全部UNUSABLE) 可以:
ALTER INDEX s_glo REBUILD PARTITION sg_1 TABLESPACE data03;
或者
alter table t_range move partition p1 update global indexes;–9i的时候已经支持了收起