分区表的基本思想就是“分而治之”,所谓“分而治之”就是允许用户将一个存储大数据量表划分成若干个部分,想成相对小、可以独立管理的分区。从而减少了表中数据的存储量,同时加快了检索表数据查询效率。
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分区就是为了减轻大数据表存数数据量,从而减轻表数据过多负担,分区而治提高查询效率。