WEB开发网
开发学院数据库Oracle 分区表、分区索引和全局索引部分总结 阅读

分区表、分区索引和全局索引部分总结

 2008-08-29 12:44:59 来源:WEB开发网   
核心提示:分区表、分区索引和全局索引: 在一个表的数据超过过2000万条或占用2G空间时,建议建立分区表,分区表、分区索引和全局索引部分总结,createtableta(c1int,c2varchar2(16),c3varchar2(64),c4intconstraintpk_taprimarykey(c1))partition

分区表、分区索引和全局索引:

在一个表的数据超过过2000万条或占用2G空间时,建议建立分区表。

   createtableta(c1int,c2varchar2(16),c3varchar2(64),c4intconstraintpk_taprimarykey(c1))partitionbyrange(c1)(partitionp1valueslessthan(10000000),partitionp2valueslessthan(20000000),partitionp3valueslessthan(30000000),partitionp4valueslessthan(maxvalue));

分区索引和全局索引:

分区索引就是在所有每个区上单独创建索引,它能自动维护,在drop或truncate某个分区时不影响该索引的其他分区索引的使用,也就是索引不会失效,维护起来比较方便,但是在查询性能稍微有点影响。

   createindexidx_ta_c2onta(c2)local(partitionp1,partitionp2,partitionp3,partitionp4);或者createindexidx_ta_c2onta(c2)local;

另外在create unique index idx_ta_c2 on ta(c2) local ;系统会报ORA-14039错误,这是因为ta表的分区列是c1,oracle不支持在分区表上创建PK主键时主键列不包含分区列,创建另外的约束(unique)也不可以。

全局索引就是在全表上创建索引,它可以创建自己的分区,可以和分区表的分区不一样,也就是它是独立的索引。在drop或truncate某个分区时需要创建索引alter index idx_xx rebuild,也可以alter table table_name drop partition partition_name update global indexes;实现,但是要花很长时间在重建索引上。可以通过查询user_indexes、user_part_indexes和user_ind_partitions视图来查看索引是否有效。

   createindexidx_ta_c3onta(c3);

或者把全局索引分成多个区(注意和分区表的分区不一样):

   createindexidx_ta_c4onta(c4)globalpartitionbyrange(c4)(partitionip1valueslessthan(10000),partitionip2valueslessthan(20000),partitionip3valueslessthan(maxvalue));

注意索引上的引导列要和range后列一致,否则会有ORA-14038错误。

oracle会对主键自动创建全局索引

如果想在主键的列上创建分区索引,除非主键包括分区键,还有就是主键建在两个或以上列上。

在频繁删除表的分区且数据更新比较频繁时为了维护方便避免使用全局索引。

Tags:分区表 分区 索引

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接