Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2800047
  • 博文数量: 389
  • 博客积分: 4177
  • 博客等级: 上校
  • 技术积分: 4773
  • 用 户 组: 普通用户
  • 注册时间: 2008-11-16 23:29
文章分类

全部博文(389)

分类: Oracle

2011-08-15 00:37:34

                                                          ORACLE表分区简介

通过使用在8I(在企业版中才有,还要额外收费,ORACLE也太狠了)引入的表分区技术,根据一个表的某个栏位把表分为多个区,我们把这个栏位称为分区键.通过使用分区,减少一些不必要的全表扫描读取,OPTIMIZER会自动判断使用哪些分区来返回当前的查询,表分区对于应用层面上来说是透明的,用户感知不到的分区的存在.通过使用分区可以减少一些管理上的负担,担高表的可用性,我们可能通过把表分区到多个表空间中,如果某个表空间坏了,只影响存放在其中的分区,其他的分区的不受影响.通过把一个表放到多个表空间中,也可以看作是表层面的RAID0.

     分区主要RANGE,HASH.LIST.和组合来分类.以下是一个根据HASH创建的一个分区别的例子.create table c (a int constraint c_a_pk primary key,b int)

partition by hash(b)

(partition p1 tablespace users,

 partition p2 tablespace test);

PARTITION的名字一定要是字母开头,通过HASH分区,可以把数据分散在各个分区中,从而起到均匀在各个表空间存放数据,ORACLE建议HASH分区方法中,分区的个数是2的幂数,2,4,8等等

RANGE主要是根据某个范围存放在哪个分区中,以下是一个例子

create table d (a int constraint d_a_pk primary key,b int)

partition by range(b)

(partition p1 values less than (5)  tablespace users,

 partition p2 values less than (10) tablespace test,

 partition  p3 values less than (MAXVALUE))

MAXVALUE分区用来存放在其他分区中不能存放的数据,也包括B为空.注意值要用()起来.(5),(10).

LIST根据分区键的值出现在情况,选择相应的分区,:

create table e (a int constraint e_a_pk primary key,b varchar2(10))

partition by list(b)

(partition p1 values ('A','B')  tablespace users,

 partition p2 values ('C','D')  tablespace test,

 partition  p3 values (DEFAULT))

DEFAULT分区用来存放在其他分区中不能存放的数据,

 

混合分区的例子,更加复杂;

create table f (a int constraint f_a_pk primary key,b varchar2(10))
partition by list(b)
subpartition by hash(a)
(partition p1 values ('A','B')
      (subpartition pp1  tablespace users,
       subpartition pp2  tablespace test),
  partition p2 values ('C','D')
      (subpartition pp3  tablespace users,
       subpartition pp4  tablespace test)
 )

  在更新引起行跨分区移动时,需要手动允许ROW MOVEMENT,否则会报错.

 

 分区技术并不一定带来性能影响,在某些情况下可能还会有损伤,一般表的大小超过10G才考虑使用分区.OLTP,由于全表扫描不多,大多数情况下都有索引,性能可能并不明显,需要对应用特性要有比较了解,才能综合使用分区技术来达到理想的情况.

阅读(2297) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~