1.分区方法
范围、哈希、列表(枚举)及组合
哈希分区数量最好为2的幂,否则会数据不均匀
2.分区索引分类
表分区后可以建本地索引和全局索引两种。
- 本地索引必然是分区索引,它和表的分区对应。本地索引又分为本地前缀和本地非前缀。本地索引oracle会自动维护
本地前缀索引的索引字段和表的分区字段一致(对于组合索引待确定),所以表分区的数据和对应的索引分区的数据一一对应
本地非前缀所以虽然索引分区和表分区对应,但只对索引字段查询时,会使用所有索引分区。所以单独使用效率不如全局索引,但本地索引会自动维护,是否建本地非前缀索引取决于查询多还是分区整理维护重要。若结合索引字段和表分区字段查询,等同于本地前缀索引,因为oracle知道只需使用一个索引分区(where条件是=)
- 全局索引分为普通索引和全局分区索引。全局索引需要手工维护,调整表分区会使全局索引失效
全局普通索引即一个大的索引树(B*时)
全局分区索引是把本来一个大的索引树分成多个分区,以减少索引高度,提供查询效率。
3.分区交换方法
alter table his exchange partition p_2011 with table t_2011; ---表结构要相同。可实现表分区与其他表物理交换(修改段地址,不动数据)
4.创建表分区
create table USER
(
id NUMBER(20) not null,
phone VARCHAR2(20),
...
imsi VARCHAR2(36)
)
tablespace tsdata
PARTITION BY hash(phone) partitions 8;
5.创建索引分区
create index IDX_USER_PHONE on USER (PHONE) local tablespace tsidx parallel 7;
create index IDX_USER_IMSI on USER (IMSI) global PARTITION BY hash(IMSI) partitions 8 tablespace tsidx parallel 7;(不知为何,这个建成后PL/SQL显示为local索引)
create unique index PK_USER_ID on USER (ID desc) tablespace tsidx parallel 7 ;