Oracle分区知识

查询分区名称、表空间的SQL

USER_SEGMENTS
SELECT SEGMENT_NAME,PARTITION_NAME,TABLESPACE_NAME FROM USER_SEGMENTS;

1、范围分区(range)

范围分区指的是通过某一字段的范围进行分区,比如说以日期范围进行分区为201320142015年表,或者以id的数字大小进行分区

用法:
--创建一个以id分区的分区表test_calc
Create table test_calc
(
    id number(6),
    create_time  date dafault sysdate
)partition by range(id)(
    partition part_1 values less than (0) tablespace space_1,
    partition part_2 values less than (maxvalue) tablespace space_2    
);
--插入数据
Insert into test_calc(id) values(-1);  --插入part_1
Insert into test_calc(id) values(10);  --插入part_2

查看整个分区表时还会和查看普通表一样,只不过会查看part_1和part_2两个分区的内容
Select * from test_calc;
单独查看part_1分区
Select * from test_calc partition(part_1);   --只有1对应的数据,没有10那一行

2、散列分区(hash)

散列分区指的是通过对某一字段进行散列分布(hash)进行分区,比如对id字段的数字求模,两个分区就是以2为模进行分布

用法:
--创建一个以id分区的分区表test_calc
Create table test_calc
(
    id number(6),
    create_time  date dafault sysdate
)partition by hash(id)(
    partition part_1 tablespace space_1 ,
    partition part_2 tablespace space_2    
);
--另一种形式:自动生成分区部门partition_name的名字
Create table test_calc
(
    id number(6),
    create_time  date dafault sysdate
)partition by hash(id)
    partitions 2
    store in(space_1,space_2) ;

--插入数据
Insert into test_calc(id) values(1);  
Insert into test_calc(id) values(2); 
Insert into test_calc(id) values(3);
Insert into test_calc(id) values(4);
插入数据之后就会自动调用hash处理方法去处理,最后呈现的结果一定是两个分区各自一半一半

***散列分区的好处就是每个分区的数据量大致相同***  

3、列表分区(list)

如果说分区字段并不是有一定范围或者数值就是某几个特定的值的情况的话,比如id就是1,2,3,4三个值,那么列表分区就是不二的选择

用法:
--创建一个以id分区的分区表test_calc
Create table test_calc
(
    id number(6),
    create_time  date dafault sysdate
)partition by list(id)(
    partition part_1 values(1,3) tablespace space_1 ,
    partition part_2 values(2,4) tablespace space_2    
);

--插入数据
Insert into test_calc(id) values(1);     --插入part_1
Insert into test_calc(id) values(2);     --插入part_2
Insert into test_calc(id) values(3);     --插入part_1

Insert into test_calc(id) values(4);     --插入part_2

4、组合范围散列分区(range-hash)

先进行范围分区(range)形成几个父分区,再在这几个父分区上进行散列分区(hash)形成几个小的子分区的形式

用法:
--创建一个以id分区的分区表test_calc
Create table test_calc
(
    id number(6),
    create_time  date dafault sysdate
)partition by range(id)
  subpartition by hash(id) 
(
    partition p_1 values less than (0)(
        subpartition p_1_1 tablespace space_1,
        subpartition p_1_2 tablespace space_2
    ) ,
   partition p_2 values less than (maxvalue)(
        subpartition p_2_1 tablespace space_1,
        subpartition p_2_2 tablespace space_2
    ) ,
   
);
--相当于分割为两个大的分区,又在两个大的分区上面分别分割了两个小的分区,一共四个分区

分别是:p_1_1、p_1_2、p_2_1、p_2_2

5、组合范围列表分区(range-hash)

先进行范围分区(range)形成几个父分区,再在这几个父分区上进行列表分区(list)形成几个小的子分区的形式

用法:
--创建一个以id分区的分区表test_calc
Create table test_calc
(
    id number(6),
    create_time  date dafault sysdate
)partition by range(id)
  subpartition by list(id) 
(
    partition p_1 values less than (0)(
        subpartition p_1_1 values(-1,-2) tablespace space_1,
        subpartition p_1_2 values(1,2) tablespace space_2
    ) ,
   partition p_2 values less than (maxvalue)(
        subpartition p_2_1 values(-1,-2) tablespace space_1,
        subpartition p_2_2 values(1,2)  tablespace space_2
    ) ,
   
);
--相当于分割为两个大的分区,又在两个大的分区上面分别分割了两个小的分区,一共四个分区

分别是:p_1_1、p_1_2、p_2_1、p_2_2
原文地址:https://www.cnblogs.com/JeromeZ/p/5337888.html