首页 > 代码库 > Oracle表分区

Oracle表分区

  当数据非常庞大的时候,比如,要查询ID<1000的时候,如果不使用表分区的话,需要全表扫描(判断每条记录的ID是否小于1000),这样大大影响了查询的速度。创建索引是性能调优的方法,同样,表分区也是。每个分区都是独立的一个段,可以放在不同的表空间下面。

  表分区有以下优点:

  (1)由于将数据分散到各个区中,减少了数据损坏的可能性。

  (2)可以对单独的分区进行数据的备份与恢复。

  (3)可以将分区分散到不同的物理磁盘,来分散IO。

  (4)提高数据库管理与性能。

  oracle提供了以下几种分区方法:

  (1)范围分区(range)  (2)哈希分区(hash)   (3)列表分区(List) (4)范围-哈希分区   (5)范围-列表分区

  range分区:就是根据表的某个字段值范围进行分区。 如下:创建分区表,根据ID的值进行分区,如果某些值暂时无法预测,可以使用maxvalue。

create table testpartition(id number,name varchar(100)) partition by range(id)
(
       partition p1 values less than (10),
       partition p2 values less than (20),
       partition p3 values less than (30),
       partition p4 values less than (maxvalue)
)

  查看用户表分区情况:

select * from user_tab_partitions

  技术分享

  插入数据:

insert into testpartition values(15,zhengxisheng)

insert into testpartition values(5,jisheng)

insert into testpartition values(32,jidong)

  查询各个分区的数据:

select * from testpartition partition(p2)

  技术分享

  更新数据:报错如下:

update testpartition set id =12 where  id =5

  技术分享

  需要成设置可移动的分区:

alter table testpartition enable row movement

update testpartition set id =12 where  id =5

  再次查询分区p2的数据:

  技术分享

Oracle表分区