散列分区是在列值上使用散列算法, 通过在分区键上执行 hash 函数决定存储的分区,将数据平均地分布到不同的分区,当列的值没有合适的条件时,建议使用散列分区。
create table employee
(
emp_id number(4),
emp_name varchar2(14),
emp_address varchar2(15),
department varchar2(10)
)partition by hash (department)
(
partition p1,
partition p2,
partition p3
)
partitions 4;
select * from employee partition(p1);
select * from employee partition(p2);
select * from employee partition(p3);
4.3)列表(list)分区列表分区的特点是某列的值只有几个,基于这样的特点我们可以采用列表分区,允许用户将不相关的数据组织在一起。
create table employee
(
emp_id number(4),
emp_name varchar2(14),
emp_address varchar2 (15)
)partition by list (emp_address)(
partition north values ('北京') ,
partition west values ('成都','重庆') ,
partition south values ('广州', '深圳'),
partition east values ('杭州', '苏州','温州')
);
添加数据
insert into employee values(1,'zhangsan','北京');
insert into employee values(2,'lucy','广州');
insert into employee values(3,'petter','深圳');
查询数据
select * from employee partition (north); --zhangsan
select * from employee partition (south); --lucy、petter
4.4) 复合分区:形式一:范围-散列分区
表首先按某列进行范围分区,然后再按散列算法进行散列分区,分区之中的分区被称为子分区
create table slog
(
sno number,
sinfo varchar(300)
)partition by range(sno) --范围分区
subpartition by hash(sinfo) --散列分区
subpartitions 6(
partition p1 values less than (2000),
partition p2 values less than (4000),
partition p3 values less than (6000),
partition p4 values less than (8000)
);
形式二:范围-列表分区
表首先按某列进行范围分区,然后再按某列进行列表分区,分区之中的分区被称为子分区
create table slog
(
sno number,
sinfo varchar(300)
)
partition by range(sno) --范围分区
subpartition by list(sinfo) --列表分区
subpartition template(
subpartition t1 values('404','notfind'),
subpartition t2 values('500','error'),
subpartition t3 values('200','success')
)
(
partition p1 values less than (2000),
partition p2 values less than (4000),
partition p3 values less than (6000),
partition p4 values less than (8000)
);
4.5)interval分区