oracle数据库实现分区的几种方式
对于并发编程熟悉的都知道CountDownLautch类吧,今天就从各种角度让我们一起来学习一下这个类的相关知识点。CountDownLautch来自何方?CountDownLautch类来自于jdk,是jdk提供的一个同步工具,它可以让一个线程或者多个线程等待,直到等到CountDownLautch的计数器减到0,完成一组操作。CountDownLautch的jar包是java.util.con
·
一、oracle实现分区的目的:
- 目的:提高大表的查询效率
- 概念:将一个表划分为多个分区表,“分而治之”
- 优缺点
优点:
(1) ‘改善查询性能’: 分区对象的查询仅搜索自己关系的分区
(2) ‘增强可用性’: 如果某个分区出现故障,其它分区的数据仍然可用
(3) ‘维护方便’: 如果某个分区出现故障,仅修复该分区即可
(4) ‘均衡I/O’: 将不同的分区放置不同的磁盘,以均衡 I/O,改善整个系统性能
缺点:
(1) 已经存在的表无法直接转化为分区表 – 不过有很多间接方法,如:重定义表 - 适用情况
(1) 表的大小超过 2GB
二、创建oracle分区表的方式:
1、创建分区表(range分区)
create table emp12(
empno number primary key,
ename varchar2(12),
job varchar2(10),
mgr varchar2(10),
hiredate date,
sal number,
comm number,
deptno number
)
partition by range(sal)--按照薪资分区
(
partition date_range1 values less than (2000) ,
partition date_range2 values less than (5000) ,
partition date_range3 values less than (10000),
partition date_range4 values less than (maxvalue)
);
查询指定分区的内容:
select * from emp12 partition(date_range1);
select * from emp12 partition(date_range2);
创建list分区表,list是一个列表,具体在list中有不同的值
2、创建分区表(list分区)
create table emp13(
empno number primary key,
ename varchar2(12),
sex char(3),
job varchar2(10),
mgr varchar2(10),
hiredate date,
sal number,
comm number,
deptno number
)
partition by list(sex)--按找性别分区
(
partition male values('男'),
partition female values('女')
);
查询指定分区的内容:
select * from emp13 partition(male);
select * from emp13 partition(female);
3、创建分区表(hash分区)
create table emp14(
empno number primary key,
ename varchar2(12),
sex char(3),
job varchar2(10),
mgr varchar2(10),
hiredate date,
sal number,
comm number,
deptno number
)
partition by hash(empno)--按找员工编号散列分区
(
partition hash1,
partition hash2
);
4、创建分区表(复合分区range+list)
create table emp15(
product_id number primary key,
sales_date date,
status varchar2(10)
)
partition by range(sales_date)--按找员工编号散列分区
subpartition by list(status)
(
partition p1 values less than (date'2000-01-01')
(
subpartition p1_list1 values('001'),
subpartition p1_list2 values('002'),
subpartition p1_list3 values('003'),
subpartition p1_list4 values(default)
),
partition p2 values less than (date'2020-01-01')
(
subpartition p2_list1 values('001'),
subpartition p2_list2 values('002'),
subpartition p2_list3 values('003'),
subpartition p2_list4 values(default)
),
partition p3 values less than (maxvalue)
(
subpartition p3_list1 values('001'),
subpartition p3_list2 values('002'),
subpartition p3_list3 values('003'),
subpartition p3_list4 values(default)
)
);
三、oracle分区表增删改查的操作:
- 查询:
select * from user_tab_partitions t;
- 添加:
alter table <table_name> add partition <partition_name> values less than(to_date('2020-02-02', 'YYYY-MM-DD'));
alter table <table_name> add partition <partition_name> values less than(1000);
- 删除: (请注意:无法删除分区表唯一的分区,除非删除表)
alter table <table_name> drop partition <partition_name>;
alter table <table_name> drop subpartition <subpartition_name>;
- 截断分区(‘清空某个分区的数据’)
alter table <table_name> truncate partition <partition_name>;
alter table <table_name> truncate subpartition <subpartition_name>;
- 拆分分区(‘拆分后,原来分区不再存在’)
alter table <table_name> sblit partition <p12> at(to_date('2020-01-01', 'YYYY-MM-DD')) into (partition p1, partition p2);
- 合并分区
alter table <table_name> merge partitions <p1>, <p2> into partition <p12>;
- 重命名分区
alter table <table_name> rename partition <pold> to <pnew>
更多推荐
已为社区贡献1条内容
所有评论(0)