分区表分区索引和全局索引 在一个表的数据超过过万条或占用G空间时建议建立分区表 createtableta(cintcvarchar()cvarchar()cintconstraintpk_taprimarykey(c))partitionbyrange(c)(partitionpvalueslessthan()partitionpvalueslessthan()partitionpvalueslessthan()partitionpvalueslessthan(maxvalue)); 分区索引和全局索引 分区索引就是在所有每个区上单独创建索引它能自动维护在drop或truncate某个分区时不影响该索引的其他分区索引的使用也就是索引不会失效维护起来比较方便但是在查询性能稍微有点影响 createindexidx_ta_conta(c)local(partitionppartitionppartitionppartitionp);或者createindexidx_ta_conta(c)local; 另外在create unique index idx_ta_c on ta(c) local ;系统会报ORA错误这是因为ta表的分区列是coracle不支持在分区表上创建PK主键时主键列不包含分区列创建另外的约束(unique)也不可以 全局索引就是在全表上创建索引它可以创建自己的分区可以和分区表的分区不一样也就是它是独立的索引在drop或truncate某个分区时需要创建索引alter index idx_xx rebuild也可以alter table table_name drop partition partition_name update global indexes;实现但是要花很长时间在重建索引上可以通过查询user_indexesuser_part_indexes和user_ind_partitions视图来查看索引是否有效 createindexidx_ta_conta(c); 或者把全局索引分成多个区(注意和分区表的分区不一样) createindexidx_ta_conta(c)globalpartitionbyrange(c)(partitionipvalueslessthan()partitionipvalueslessthan()partitionipvalueslessthan(maxvalue)); 注意索引上的引导列要和range后列一致否则会有ORA错误 oracle会对主键自动创建全局索引 如果想在主键的列上创建分区索引除非主键包括分区键还有就是主键建在两个或以上列上 在频繁删除表的分区且数据更新比较频繁时为了维护方便避免使用全局索引 |