Oracle 分区技术

本文介绍了Oracle数据库的四种分区技术:范围分区、散列分区、列表分区和复合分区,并通过实例展示了每种分区的创建、插入数据和查询操作。通过分区技术,可以提高数据管理和查询效率。
摘要由CSDN通过智能技术生成
首先声明部分有转载

对于分区来说,概念理解还不如看一个实实在在的例子来的爽一些,不用多说看例子:

1、范围分区 /*根据表中的某个字段的之来进行分区,数据插入的时候会插入到相应的分区中*/

create table graderecord(/*创建一个学生成绩的表*/
     sno               varchar2(10),
     sname         varchar2(20),
     dormitory     varchar2(30),
     grade            int

)
partition by range(grade)----创建范围分区,根据grade字段

(
       partition bujige values less than(60),---不及格
       partition  jigevalues values less than(85),--及格
       partition  youxiu values less than(maxvalue)--优秀

 );

插入数据

  1. insert into graderecord values('511601','魁','229',92);   
  2. insert into graderecord values('511602','凯','229',62);   
  3. insert into graderecord values('511603','东','229',26);   
  4. insert into graderecord values('511604','亮','228',77);   
  5. insert into graderecord values('511605','敬','228',47);   
  6. insert into graderecord(sno,sname,dormitory) values('511606','峰','228');   
  7. insert into graderecord values('511607','明','240',90);   
  8. insert into graderecord values('511608','楠','240',100);   
  9. insert into graderecord values('511609','涛','240',67);   
  10. insert into graderecord values('511610','博','240',75);   
  11. insert into graderecord values('511611','铮','240',60); 

查询全部数据

select * from graderecord;


 

select * from graderecord partition(bujige);

 

select * from graderecord partition(jige);

select * from graderecord partition(youxiu);

 

以上就是简单的范围分区的语法和使用。

2、散列分区,也就是HASH分区

create table graderecord(/*创建一个学生成绩的表*/
     sno               varchar2(10),
     sname         varchar2(20),
     dormitory     varchar2(30),
     grade            int

)
partition by hash(sno)----创建范围分区,根据grade字段

(
       partition p1,
       partition  p2,
       partition  p3,

 );

查询的时候使用partition

select * from graderecord partition(p1);

select * from graderecord partition(p2);

select * from graderecord partition(p3);

查询出来的结果每次有可能不一样,HASH算法由Oracle决定

3、列表分区-----list

create table graderecord(/*创建一个学生成绩的表*/
     sno               varchar2(10),
     sname         varchar2(20),
     dormitory     varchar2(30),
     grade            int

)

partition by list(dormitory)(-----按宿舍分区

   partition  p229   values ('229'),

   partition p228  values('288'),

   partition p204  values ('240')

)

select * from graderecord partition('p229');

p229分区所得数据如下:

 select * from graderecord partition('p228');

p228分区所得数据如下:

 select * from graderecord partition('p240);

p240分区所得数据如下:

 

4、复合分区

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

代码如下:

Sql代码 复制代码  收藏代码
  1. create table graderecord   
  2. (   
  3.   sno varchar2(10),   
  4.   sname varchar2(20),   
  5.   dormitory varchar2(3),   
  6.   grade int  
  7. )   
  8. partition by range(grade)   
  9. subpartition by hash(sno,sname)   
  10. (   
  11.   partition p1 values less than(75)   
  12.             (   
  13.                subpartition sp1,subpartition sp2   
  14.             ),   
  15.   partition p2 values less than(maxvalue)   
  16.             (   
  17.                subpartition sp3,subpartition sp4   
  18.             )   
  19. );  
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代码 复制代码  收藏代码
  1. insert into graderecord values('511601','魁','229',92);   
  2. insert into graderecord values('511602','凯','229',62);   
  3. insert into graderecord values('511603','东','229',26);   
  4. insert into graderecord values('511604','亮','228',77);   
  5. insert into graderecord values('511605','敬','228',47);   
  6. insert into graderecord(sno,sname,dormitory) values('511606','峰','228');   
  7. insert into graderecord values('511607','明','240',90);   
  8. insert into graderecord values('511608','楠','240',100);   
  9. insert into graderecord values('511609','涛','240',67);   
  10. insert into graderecord values('511610','博','240',75);   
  11. insert into graderecord values('511611','铮','240',60);   
  12. insert into graderecord values('511612','狸','244',72);   
  13. insert into graderecord values('511613','杰','244',88);   
  14. insert into graderecord values('511614','萎','244',19);   
  15. insert into graderecord values('511615','猥','244',65);   
  16. insert into graderecord values('511616','丹','244',59);   
  17. insert into graderecord values('511617','靳','244',95);  
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 gr
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值