分区 分区表 分区索引 学习笔记

来源:互联网 发布:有什么网络手游好玩 编辑:程序博客网 时间:2024/06/06 20:21

分区的过程是将一个表或索引物理地分解为多个更小,更可管理的部分。而就访问数据库的应用而言,逻辑上讲只有一个分区或一个索引。每个分区是一个独立的对象,可以独自处理,也可以作为一个更大对象的一部分进行处理。



使用分区不一定就能提高性能,也可能更慢,可能不变。须了解里面的机制,具体问题具体处理。



分区表





使用分区表的好处:

1.提高数据可用性;

2.减少管理负担,对比一个大对象,如在多个小对象上执行同样的操作会更快,如重建索引等;

3.改善语句性能,特别对于OLAP(数据仓库或决策支持)系统,而对于OLTP须慎用。

4.可以把修改分布到多个单独的分区上,从而减少大容量OLTP系统上的竞争。



对表分区的方法:

1.区间(例如按日期)

2.散列(通过散列函数,随机地(均匀地)分布在多个分区上,分区最好是2的幂。

3.列表(根据离散的值列表指定位于哪个分区)

4.间隔(以一个区间分区为起点,增加一个间隔,新进来的数据使数据库自动增加分区)

5.引用(父/子对等分区,子表继承父表分区机制,截除相应的子表分区时,也能删除或截除父表分区)

6.组合(如先区间,再散列)



行移动:

用于确定分区的列上的记录修改。

如果修改了,行仍属于原来的分区,那没事。

如果修改了,行会跨分区移动,则只有当表启用行移动才支持,否则会报错。



alter table range_example 

enable row movement;









分区索引

局部索引(locally index)

每个表分区都有一个索引分区,而且只索引该表分区。一个给定索引分区中的所有条目都指向一个表分区,表分区中的所有行都表示在一个索引分区中。

局部前缀索引:分区键在索引定义的前几列

局部非前缀索引:不是前几列,索引可能包含分区间,也可能不包含。

两者分别:个人认为前者更好,因为可以保证查询包含的谓词容许索引分区消除(即首先就排除了不相干的索引分区),后者未必能。当然,如果索引作为查询计划的第一步,则两者没有多少差别)。



全局分区索引(globally partitioned index)

一个索引分区可能指向任何表分区,索引分区数可能不同于表分区数。



两者分别,数据仓库多数用局部索引,OLTP则全局索引更常见。




原创粉丝点击