目录
🎈表分区的作用🎈
允许用户将表分成多个分区
用户执行查询,只访问表中特定分区
将不同分区存储在不同磁盘,提高访问性能和安全性
可以独立备份和恢复每个分区
不能分区的情况:
表中包含非结构性数据,如:LOSB,LONGRAW或对象类型
索引组织的表不能分区
分区方法
范围分区
散列(hash)分区
列表分区
复合分区
🎈范围分区🎈
特点:以表中的一个列或一组列的值的范围分区
使用方法:
create table bookInfo3
(
id number(3),
bookname varchar2(20),
author varchar2(20),
price number(10,2),
bnumber number(20)
)
partition by range(price)
(
partition p1 values less than(100),
partition p2 values less than(200),
partition p3 values less than(300),
partition p4 values less than(400),
partition p5 values less than(500)
);
在这里我们新建一个bookInfo3表并通过price对其进行范围分区,小于100为一个区,大于等于100小于200为一个区以此类推,那么怎么看分区呢?在这里的话使用查询语句在SQL plus里面进行查询就行了
select * from user_tab_partitions u where u.table_name='BOOKINFO3';
🎈散列分区🎈
特点:允许用户对不具有逻辑范围的数据进行分区
通过在分区键上执行HASH函数决定存储的分区
通过hash算法将数据平均地分布到不同的分区
使用方法:
create table bookInfo5
(
id number(3),
bookname varchar2(20),
author varchar2(20),
price number(10,2),
bnumber number(20)
)
partition by hash(id)
(
partition p1,
partition p2
);
insert into bookInfo5 values(1,'海底两万里','小赵',20,23);
insert into bookInfo5 values(2,'活着','小赵',123,23);
insert into bookInfo5 values(3,'猫和狗','小王',234,23);
insert into bookInfo5 values(4,'狂人日记','小王',345,23);
insert into bookInfo5 values(5,'海底两万里','小李',20,23);
insert into bookInfo5 values(6,'活着','小李',123,23);
insert into bookInfo5 values(7,'猫和狗','小周',234,23);
insert into bookInfo5 values(8,'狂人日记','小周',345,23);
同样的我们在新建一个bookInfo5的表,插入数据后通过hash来进行分区
查询p1分区的数据
select * from bookInfo5 partition(p1);
🎈 列表分区🎈
特点:允许用户将不相关的数据组织到一起
使用方法:
create table bookInfo4
(
id number(3),
bookname varchar2(20),
author varchar2(20),
price number(10,2),
bnumber number(20)
)
partition by list(author)
(
partition p1 values('小王','小赵'),
partition p2 values('小李','小周')
);
insert into bookInfo4 values(1,'海底两万里','小赵',20,23);
insert into bookInfo4 values(2,'活着','小赵',123,23);
insert into bookInfo4 values(3,'猫和狗','小王',234,23);
insert into bookInfo4 values(4,'狂人日记','小王',345,23);
insert into bookInfo4 values(5,'海底两万里','小李',20,23);
insert into bookInfo4 values(6,'活着','小李',123,23);
insert into bookInfo4 values(7,'猫和狗','小周',234,23);
insert into bookInfo4 values(8,'狂人日记','小周',345,23);
新建bookInfo4表并通过作者姓名进行列表分区
查询p2分区的数据
select * from bookInfo4 partition(p2);
🎈复合分区🎈
特点:范围分区与散列分区或列表分区的组合
使用方法:
create table bookInfo6
(
id number(3),
bookname varchar2(20),
author varchar2(20),
price number(10,2),
bnumber number(20)
)
partition by range(price)
subpartition by hash(id)
subpartitions 3
(
partition p1 values less than(200),
partition p2 values less than(400),
partition p3 values less than(600)
);
insert into bookInfo6 values(1,'海底两万里','小赵',20,23);
insert into bookInfo6 values(2,'活着','小赵',123,23);
insert into bookInfo6 values(3,'猫和狗','小王',234,23);
insert into bookInfo6 values(4,'狂人日记','小王',345,23);
insert into bookInfo6 values(5,'海底两万里','小李',20,23);
insert into bookInfo6 values(6,'活着','小李',123,23);
insert into bookInfo6 values(7,'猫和狗','小周',234,23);
insert into bookInfo6 values(8,'狂人日记','小周',345,23);
新建bookInfo6表并对其进行复合分区
subpartitions 3 --代表每一个range分区下有3个hash的子分区
查询p2分区的数据
select * from bookInfo6 partition(p2);
🎈合并表分区🎈
alter table bookInfo3 merge partitions p2,p3 into partition t1;
🎈拆分表分区🎈
alter table bookInfo3 split partition t1 at (200) into(partition p2,partition p3);
🎈添加表分区🎈
alter table bookInfo3 add partition p6 values less than(600);
🎈 删除表分区🎈
alter table 表名 drop partition 分区名; ---慎用,删除分区和分区中的数据
alter table 表名 truncate partition 分区名; ---删除分区中的数据