oracle分区实例 下载本文

内容发布更新时间 : 2024/12/24 2:17:00星期一 下面是文章的全部内容请认真阅读。

Oracle表分区分为四种:范围分区,散列分区,列表分区和复合分区。

一:范围分区

就是根据数据库表中某一字段的值的范围来划分分区,例如: Sql代码:

create table graderecord (

sno varchar2(10), sname varchar2(20), dormitory varchar2(3), grade int

)

partition by range(grade)

(

partition bujige values less than(60), --不及格 partition jige values less than(85), --及格

partition youxiu values less than(maxvalue) --优秀 )

插入实验数据:

Sql代码:

Insert into graderecord values('511601','魁','229',92); insert into graderecord values('511602','凯','229',62); insert into graderecord values('511603','东','229',26); insert into graderecord values('511604','亮','228',77);

insert into graderecord values('511605','敬','228',47);

insert into graderecord(sno,sname,dormitory) values('511606','峰','228'); insert into graderecord values('511607','明','240',90); insert into graderecord values('511608','楠','240',100); insert into graderecord values('511609','涛','240',67); insert into graderecord values('511610','博','240',75); insert into graderecord values('511611','铮','240',60);

下面查询一下全部数据,然后查询各个分区数据,代码一起写:

Java代码:

select * from graderecord;

select * from graderecord partition(bujige); select * from graderecord partition(jige); select * from graderecord partition(youxiu); 全部数据如下:

不及格数据如下:

及格数据如下:

优秀数据如下:

说明:数据中有空值,Oracle机制会自动将其规划到maxvalue的分区中。

二:散列分区

散列分区是根据字段的hash值进行均匀分布,尽可能的实现各分区所散列的数据相等。 还是刚才那个表,只不过把范围分区改换为散列分区,语法如下(删除表之后重建):

Sql代码:

create table graderecord (

sno varchar2(10), sname varchar2(20), dormitory varchar2(3),

grade int

)

partition by hash(sno) (

partition p1, partition p2, partition p3

);

插入实验数据,与范围分区实验插入的数据相同。 然后查询分区数据: Sql代码:

select * from graderecord partition(p1); select * from graderecord partition(p2); select * from graderecord partition(p3); p1分区的数据:

p2分区的数据:

p3分区的数据:

说明:散列分区即为哈希分区,Oracle采用哈希码技术分区,具体分区如何由Oracle说的算,也可能我下一次搜索就不是这个数据了。

三:列表分区

列表分区明确指定了根据某字段的某个具体值进行分区,而不是像范围分区那样根据字段的值范围来划分的。

Sql代码:

create table graderecord (

sno varchar2(10), sname varchar2(20), dormitory varchar2(3), grade int )

partition by list(dormitory) (

partition d229 values('229'), partition d228 values('228'), partition d240 values('240')

)

以上根据宿舍来进行列表分区,插入与范围分区实验相同的数据,做查询如下: Sql代码:

select * from graderecord partition(d229); select * from graderecord partition(d228); select * from graderecord partition(d240); d229分区所得数据如下:

d228分区所得数据如下:

d240分区所得数据如下:

四:复合分区 (范围-散列分区,范围-列表分区)

首先讲范围-散列分区。先声明一下:列表分区不支持多列,但是范围分区和哈希分区支持多列。

代码如下: Sql代码:

create table graderecord

(

sno varchar2(10), sname varchar2(20), dormitory varchar2(3), grade int

)

partition by range(grade) subpartition by hash(sno,sname) (

partition p1 values less than(75) (

subpartition sp1,subpartition sp2 ),

partition p2 values less than(maxvalue) (

subpartition sp3,subpartition sp4

) );

以grade划分范围,然后以sno和sname划分散列分区,当数据量大的时候散列分区则趋于“平均”。 插入数据:

Sql代码:

insert into graderecord values('511601','魁','229',92); insert into graderecord values('511602','凯','229',62); insert into graderecord values('511603','东','229',26); insert into graderecord values('511604','亮','228',77); insert into graderecord values('511605','敬','228',47);

insert into graderecord(sno,sname,dormitory) values('511606','峰','228'); insert into graderecord values('511607','明','240',90); insert into graderecord values('511608','楠','240',100); insert into graderecord values('511609','涛','240',67); insert into graderecord values('511610','博','240',75); insert into graderecord values('511611','铮','240',60); insert into graderecord values('511612','狸','244',72); insert into graderecord values('511613','杰','244',88); insert into graderecord values('511614','萎','244',19); insert into graderecord values('511615','猥','244',65); insert into graderecord values('511616','丹','244',59); insert into graderecord values('511617','靳','244',95); 查询如下: Sql代码:

select * from graderecord partition(p1); select * from graderecord partition(p2); select * from graderecord subpartition(sp1);