对分区表的一些总结

分区表分为:
范围分区(partition by range),列表分区(partition by list),HASH分区(partition by hash)

有多少个分区就有多少个segment

其实HASH分区最大的好处在于,将数据根据一定的HASH算法,均匀分布到不同的分区中去,避免查询数据时集中在某个地方
,从而避免热点块的竞争,改善IO,此处时间列建HASH分区一般不妥当,因为我们经常都指定具体的时间来完成数据检索,
或者是指定具体的时间来完成数据清理,对这HASH分区来说,就不合适了。HASH可以精确匹配,无法范围扫描。


分区表示有额外开销的,如果分区表数量过多,oracle就需要管理过多的段,在操作分区表时也容易引发oracle内部大量的
递归调用。所以一般只有大表才建议分区,记录数在100万以下的表,不建议分区。


分区表的特性:
1.高效的分区消除
可以精确的查到所要查到的位置
可以用truncate删除某个区的数据
2.分区交换(转移备份)
alter table 分区表 exchange partition 分区名 with table 中间表
3.分区切割
比如:alter table 分区表 split partition p_max at (TO_DATE('2013-02-01','yyyy-mm-dd')) into (partition p2003_01,partiton p_max);
①分区切割的三个关键字split,at和into
②at部分在此处说明了具体的发范围,小于某个指定的值。
③into部分说明分区被切割成两个分区。
4.分区合并
比如:alter table 分区表 merge partition p2013_02,p_max into partition p_max;
①分区合并的关键字是merge和into
②merge后面跟着的是需要合并的两个分区名
③into部分为合并的分区名,可以是新的分区名,也可沿用已经存在的分区名
5增加分区和删除分区
①分区增加add partition,分区删除drop partition
②由于maxvalue分区的存在,无法追加新的分区,必须删除了才可以追加


分区表的索引
全局索引:create index 索引名 on range_part_tab(deal_data);
局部索引:create index 索引名 on range_part_tab(area_code) local;
N/A表示局部索引

分区表的相关陷阱
1.索引为何频频失效
通过实验用alter table range_part_tab truncate partition p1;一个分区可以看到全局索引失效了,局部没有失效。
oracle提供了一个有用的参数update global indexes,可以有效的避免全局索引失效。
alter table range_part_tab truncate partition p2 update global indexes;
其中的分区转移,切割。合并。增删都可以用这个参数防止索引失效。

 

posted @ 2018-02-26 16:49  路人佳  阅读(920)  评论(0编辑  收藏  举报