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);