一、概述
当表中的数据量不断增大,查询数据的速度就会变慢,应用程序的性能就会下降,这时就应该考虑对表进行分区。表进行分区后,逻辑上表仍然是一张完整的表,只是将表中的数据在物理上存放到多个表空间(物理文件上),这样查询数据时,不至于每次都扫描整张表。
二、类型
1、范围分区
根据列的数值范围进行分区,最常见的是根据日期分区。
create table STUDENT( id varchar2(20), name varchar2(20), birthday date, type varchar2(20) ) partition by range(birthday) ( partition S80 values less than (to_date('1990-01-01','yyyy-mm-dd')) TABLESPACE SP_01, partition S90 values less than (to_date('2000-01-01','yyyy-mm-dd')) TABLESPACE SP_02 )
2、列表分区
根据列的具体值来分区,适用于列值固定的数据,如类型,部门。
create table STUDENT( id varchar2(20), name varchar2(20), birthday date, type varchar2(20) ) partition by list(type) ( partition full_time values ('fullTime') TABLESPACE SP_01, partition part_time values ('partTime') TABLESPACE SP_02 )
3、散列分区
这类分区是在列值上使用散列算法,以确定将行放入哪个分区中。当列的值没有合适的条件时,建议使用散列分区。散列分区为通过指定分区编号来均匀分布数据的一种分区类型,因为通过在I/O设备上进行散列分区,使得这些分区大小一致。
CREATE TABLE HASH_TABLE ( COL NUMBER(8), INF VARCHAR2(100) ) PARTITION BY HASH (COL) ( PARTITION PART01 TABLESPACE HASH_TS01, PARTITION PART02 TABLESPACE HASH_TS02, PARTITION PART03 TABLESPACE HASH_TS03 )
4、组合分区
以上分区类型的组合
三、操作
1、查询特定分区里的数据
select * from track_list partition(M201801)
2、查看分区情况
select * from USER_TAB_PARTITIONS
3、新增分区
alter table graderecord add partition S_01
4、删除分区
alter table table_name drop partition S_4
5、合并分区
ALTER TABLE SALES MERGE PARTITIONS P1,P2 INTO PARTITION P2
6、拆分分区
alter table graderecord split partition P_01 at(75) into(partition P_02,partition P_03)