ORACLE 分区表

来源:互联网 发布:python有什么用 编辑:程序博客网 时间:2024/05/22 14:28

分区表的基本思想就是“分而治之”,所谓“分而治之”就是允许用户将一个存储大数据量表划分成若干个部分,想成相对小、可以独立管理的分区。从而减少了表中数据的存储量,同时加快了检索表数据查询效率。

ORACLE 分区表类型有:范围分区、列表分区、间隔分区、散列分区、虚拟分区等。

这次就练习范围分区的创建和使用,直接进入实战:

--创建test_partitioning表,并以t_id为范围进行分区

create table test_partitioning(
t_id number,
t_name varchar2(10)
)
partition by range(t_id)  --range(t_id)表示以t_id作为范围分区列
(
          partition t_p1 values less than(2),  --2表此区间存放最上限,不包括2(存放至<2)
          partition t_p2 values less than(4),
          partition t_p3 values less than(6)
);

SQL> insert into test_partitioning values(1,'a');
1 row inserted
SQL> insert into test_partitioning values(2,'b');
1 row inserted
SQL> insert into test_partitioning values(3,'c');
1 row inserted
SQL> insert into test_partitioning values(4,'d');
1 row inserted
SQL> insert into test_partitioning values(5,'e');
1 row inserted

SQL> commit;
Commit complete

--查询所有分区数据
SQL> select * from test_partitioning;
      T_ID T_NAME
---------- ----------
         1 a
         2 b
         3 c
         4 d
         5 e

--查询指定分区的数据

SQL> select * from test_partitioning partition(t_p3);
      T_ID T_NAME
---------- ----------
         4 d
         5 e

--插入一条不在分区范围内的数据

SQL> insert into test_partitioning values(7,'t');
insert into test_partitioning values(7,'t')
ORA-14400: 插入的分区关键字未映射到任何分区


--创建没有满足条件默认接收的分区表

SQL> create table test_partitioning2(
  2  t_id number,
  3  t_name varchar2(10)
  4  )
  5  partition by range(t_id)
  6  (
  7            partition t_p1 values less than(2),
  8            partition t_p2 values less than(4),
  9            partition t_p3 values less than(6),
 10           partition t_p4 values less than(MAXVALUE)  --存放没有满足以上三分区条件数据
 11  );
Table created

SQL> insert into test_partitioning2 values(1,'a');
1 row inserted
SQL> insert into test_partitioning2 values(2,'b');
1 row inserted
SQL> insert into test_partitioning2 values(3,'c');
1 row inserted
SQL> insert into test_partitioning2 values(4,'d');
1 row inserted
SQL> insert into test_partitioning2 values(5,'e');
1 row inserted
SQL> insert into test_partitioning2 values(7,'e');  --没有满足条件的一律保存到t_p4分区
1 row inserted
SQL> insert into test_partitioning2 values(8,'e');  --没有满足条件的一律保存到t_p4分区
1 row inserted

--查询所有分区数据
SQL> select * from test_partitioning2;
      T_ID T_NAME
---------- ----------
         1 a
         2 b
         3 c
         4 d
         5 e
         7 e
         8 e
7 rows selected


--查询指定分区的数据 

SQL> select * from test_partitioning2 partition(t_p1);
      T_ID T_NAME
---------- ----------
         1 a

--查询没有满足以上三分区条件数据都放入t_p4分区

SQL> select * from test_partitioning2 partition(t_p4);
      T_ID T_NAME
---------- ----------
         7 e
         8 e

--oracle分区就是为了减轻大数据表存数数据量,从而减轻表数据过多负担,分区而治提高查询效率。