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);  

二:散列分区 即Hash分区,实现类似负载均衡
散列分区是根据字段的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);  

说明:散列分区即为哈希分区,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);  

四:复合分区 (范围-散列分区,范围-列表分区)
首先讲范围-散列分区。先声明一下:列表分区不支持多列,但是范围分区和哈希分区支持多列。
代码如下:

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);  
select * from graderecord subpartition(sp2);  
select * from graderecord subpartition(sp3);  
select * from graderecord subpartition(sp4);  

说明:当数据量越来越大时,哈希分区的分区表中数据越来越趋于平衡。

下面讲范围-列表分区
范围-列表分区有两种创立方式,先说说没有模板的创建方式,这个表我要重建:

Sql代码  

create table MobileMessage  
(  
 ACCT_MONTH VARCHAR2(6), -- 帐期 格式:年月 YYYYMM  
 AREA_NO VARCHAR2(10), -- 地域号码   
 DAY_ID VARCHAR2(2), -- 本月中的第几天 格式 DD  
 SUBSCRBID VARCHAR2(20), -- 用户标识   
 SVCNUM VARCHAR2(30) -- 手机号码  
)  
partition by range(ACCT_MONTH,AREA_NO) subpartition by list(DAY_ID)  
(  
  partition p1 values less than('200705','012')  
  (  
    subpartition shangxun1 values('01','02','03','04','05','06','07','08','09','10'),  
    subpartition zhongxun1 values('11','12','13','14','15','16','17','18','19','20'),  
    subpartition xiaxun1 values('21','22','23','24','25','26','27',&
  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值