文章目录- 一、范围分区
- 二、散列分区
- 三、列表分区
- 四、复合分区(范围-散列分区,范围-列表分区)
- 五、表分区查询
一、范围分区
范围分区是根据数据库表中某一字段的值的范围来划分分区,例如: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);