Oracle规划分区

Oracle在创建表的同时规划分区

1、分区概念

Oracle在实际业务生产环境中,经常会遇到随着业务量的逐渐增加,表中的数据行数的增多,Oracle对表的管理和性能的影响也随之增大。对表中数据的查询、表的备份的时间将大大提高,以及遇到特定情况下,要对表中数据进行恢复,也随之数据量的增大而花费更多的时间。这个时候,Oracle数据库提供了分区这个机制,通过把一个表中的行进行划分,归为几部分,可以减少大数据量表的管理和性能问题。利用这种分区方式把表数据进行划分的机制称为表分区,各个分区称为分区表。

2、分区作用

Oracle分区对于大型表(大数据量)非常有用,分区的作用主要有:

1、改善大型表的查询性能,因为可以通过查询对应分区表中对应的数据,而不需要查询整个表。

2、表更容易管理,因为分区表的数据存储在各个分区中,所以可以按照分区建,来管理对应分区当中的数据,可以按照分区加载和删除其中的数据,比在不分区情况下,更容易管理数据。以及在特定的事故情况下,通过备份好的分区,可以快速恢复对应分区当中的数据,也不需要对全表数据进行恢复。

3、创建分区

/*==============================================================*/
/* Table: T_ATTENSION_OFFACC                                    */
/*==============================================================*/
--表结构
create table T_ATTENSION_OFFACC 
(
   T_USER_MOBILE        varchar2(11)         not null,
   T_OFFICIAL_ACCOUNT_ID VARCHAR2(50)         not null,
   T_ATTENSION_DATE     DATE,
   T_ATTENSION_STATE    VARCHAR2(1),
   constraint PK_T_ATTENSION_OFFACC primary key (T_USER_MOBILE, T_OFFICIAL_ACCOUNT_ID)
)

--分区
partition by range(T_ATTENSION_DATE)(
partition p_attension_2020_02 values less than (TO_DATE('2020-03-01 00:00:00','yyyy-mm-dd hh24:mi:ss'))
          TABLESPACE TS_ATTENSION_2020_02,
partition p_attension_2020_03 values less than (TO_DATE('2020-04-01 00:00:00','yyyy-mm-dd hh24:mi:ss'))
          TABLESPACE TS_ATTENSION_2020_03,
partition p_attension_2020_04 values less than (TO_DATE('2020-05-01 00:00:00','yyyy-mm-dd hh24:mi:ss'))
          TABLESPACE TS_ATTENSION_2020_04,
partition p_attension_2020_05 values less than (TO_DATE('2020-06-01 00:00:00','yyyy-mm-dd hh24:mi:ss'))
          TABLESPACE TS_ATTENSION_2020_05,
partition p_attension_2020_06 values less than (MAXVALUE)
          TABLESPACE TS_ATTENSION_2020_06
);

这里使用命令partition by range对表的字段(T_ATTENSION_DATE)进行分区,如录入日期小于2020年03月的会被放入分区p_attension_2020_02 当中。

所以,2020_02月份的数据会被放入p_attension_2020_02 这个分区当中,2020_03月份的数据会被放入p_attension_2020_03这个分区当中。 这里不必为最后一个分区指定最大值,maxvalue关键字会告诉Oracle使用这个分区来存储前面几个分区当中不能存储的数据。

上面实例展示的是Oracle按照值的范围进行分区,Oracle还支持散列分区,通过某一个字段,把表中的数据散列在各个分区中。可以通过关键字partition by hash,把分区散列到不同的表空间当中。

Oracle还支持列表分区(partition by list),它是通过按照指定分区建的值归并到各个分区,其实这里学生成绩表也可以考虑按照课程进行列表分区。

总结:Oracle分区对大型表(数据量大)有重大的性能提升,所以在表结构设计时,需要提前按照相关业务需求进行相应的改进。

4、查看分区数据

select * from test_env.t_attension_offacc partition(P_ATTENSION_2020_02);
原文地址:https://www.cnblogs.com/beanbag/p/12369146.html