【Oracle笔记】详解表分区的方式(范围、散列、列表、复合)

2022-05-12 08:33:46 浏览数 (1)

文章目录
  • 一、范围分区
  • 二、散列分区
  • 三、列表分区
  • 四、复合分区(范围-散列分区,范围-列表分区)
  • 五、表分区查询

一、范围分区

   范围分区是根据数据库表中某一字段的值的范围来划分分区,例如:user表过于庞大时,将user表根据一周7天分成7个分区。

代码语言:javascript复制
create table user(
	user_id        varchar2(20 char),
	user_name      varchar2(50 char)
	part_flag      NUMBER(1)
)
tablespace user_data
partition by range(part_flag)(
	partition user_p1 values less than(2) tablespace user_data,
	partition user_p2 values less than(3) tablespace user_data,
	partition user_p3 values less than(4) tablespace user_data,
	partition user_p4 values less than(5) tablespace user_data,
	partition user_p5 values less than(6) tablespace user_data,
	partition user_p6 values less than(7) tablespace user_data,
	partition user_p7 values less than(8) tablespace user_data
);

二、散列分区

   散列分区是根据字段的hash值进行均匀分布,尽可能的实现各分区所散列的数据相等。

代码语言:javascript复制
create table user(
	user_id        varchar2(20 char),
	user_name      varchar2(50 char)
	part_flag      NUMBER(1)
)
partition by hash(user_id)
(
	partition p1,  
	partition p2,  
	partition p3
)

三、列表分区

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

代码语言:javascript复制
create table user(
	user_id        varchar2(20 char),
	user_name      varchar2(50 char),
	part_flag      NUMBER(1)
)
partition by list(user_id)
(
	partition A01 values('01'),  
	partition A02 values('02'),  
	partition A03 values('03')
)

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

  列表分区不支持多列,但是范围分区和哈希分区支持多列。

代码语言:javascript复制
create table user(
	user_id        varchar2(20 char),
	user_name      varchar2(50 char),
	part_flag      NUMBER(1)
)
partition by range(part_flag)
subpartition by hash(user_id,user_name)
 (
	partition p1 values less than(50)   (  
 		subpartition sp1, subpartition sp2  
 	),  
 	partition p2 values less than(100)  (  
  		subpartition sp3, subpartition sp4
    )  
)
代码语言:javascript复制
create table user(
	user_id        varchar2(20 char),
	user_name      varchar2(50 char),
	part_flag      NUMBER(1)
)
partition by range(part_flag) subpartition by list(user_id)  
 (  
   partition p1 values less than(50')  
   (  
     subpartition s1 values('01','02','03','04','05','06','07','08','09','10'),  
     subpartition s1 values('11','12','13','14','15','16','17','18','19','20'),  
     subpartition s1 values('21','22','23','24','25','26','27','28','29','30')  
   ),  
   partition p2 values less than(100)  
   (  
     subpartition s2 values('01','02','03','04','05','06','07','08','09','10'),  
     subpartition s2 values('11','12','13','14','15','16','17','18','19','20'),  
     subpartition s2 values('21','22','23','24','25','26','27','28','29','30')  
   )
 )  

五、表分区查询

代码语言:javascript复制
select * from user partition(p1); 
select * from user subpartition(sp1);

0 人点赞