一、oracle实现分区的目的:

  1. 目的:提高大表的查询效率
  2. 概念:将一个表划分为多个分区表,“分而治之”
  3. 优缺点
    优点:
    (1) ‘改善查询性能’: 分区对象的查询仅搜索自己关系的分区
    (2) ‘增强可用性’: 如果某个分区出现故障,其它分区的数据仍然可用
    (3) ‘维护方便’: 如果某个分区出现故障,仅修复该分区即可
    (4) ‘均衡I/O’: 将不同的分区放置不同的磁盘,以均衡 I/O,改善整个系统性能
    缺点:
    (1) 已经存在的表无法直接转化为分区表 – 不过有很多间接方法,如:重定义表
  4. 适用情况
    (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分区表增删改查的操作:

  1. 查询:
 select * from user_tab_partitions t;
  1. 添加:
 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);
  1. 删除: (请注意:无法删除分区表唯一的分区,除非删除表)
alter table <table_name> drop partition <partition_name>;
   alter table <table_name> drop subpartition <subpartition_name>;
  1. 截断分区(‘清空某个分区的数据’)
alter table <table_name> truncate partition <partition_name>;
   alter table <table_name> truncate subpartition <subpartition_name>;
  1. 拆分分区(‘拆分后,原来分区不再存在’)
   alter table <table_name> sblit partition <p12> at(to_date('2020-01-01', 'YYYY-MM-DD')) into (partition p1, partition p2);
  1. 合并分区
  alter table <table_name> merge partitions <p1>, <p2> into partition <p12>;
  1. 重命名分区
  alter table <table_name> rename partition <pold> to <pnew>
Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐