1、定义
Oracle可以将大表或索引分成若干更小、更方便管理的部分,每一部分成为一个分区,这样的表称为分区表。在逻辑上,表仍然是一张完整的表,只是将表中的数据在物理上可能存放到多个表空间或物理文件上。在查询数据时,不至于每次都扫描整张表。
2、不能分区的情况
(1)簇表不能进行分区;
(2)不能分割含有LONG或LONG RAW列的表(LONG、LONG RAW存储大文件对象);
(3)索引组织表不能进行范围分区
3、何时考虑分区?
对大表进行分区,将有益于大表操作的性能和大表的数据的维护。官方文档通常当表的大小超过2GB,或对于OLTP系统,当表的记录超过1000万时,都应考虑对表进行分区。
4、分区优点
(1)增强可用性。如果表的一个分区由于系统故障而不能使用,那么表的其余好的分区仍然可以使用。
(2)减少关闭时间。如果系统故障只影响表的一部分分区,那么只有这部分分区需要修复,可能比整个大表修复花的时间更少。
(3)维护轻松。单独管理每个分区比管理单个大表要轻松得多。
(4)均衡I/O。可以把表的不同分区分配到不同的磁盘来平衡I/O,改善性能。
(5)改善性能。对大表的查询、增加、修改等操作可以分解到表的不同分区来并行执行,可以使运行的速度更快。
(6)分区对于用户透明,最终用户感觉不到分区的存在。
5、Oracle12C列表分区Auto-List Partitioning
在Oracle Database 12.2之前,如果使用列表分区,当插入的数据超过了分区列表值设定,则会抛出异常;而如果存在大量的列表值需要定义,则可能需要一一设置。
在12.2引入的新特性中-Auto-List Partitioning可以针对新的列表值,进行自动的分区创建,从而减少了维护的复杂性。
1 对于新创建的表,可直接创建为AUTO LIST 的分区表即可,需在建表脚本中添加如下建表子句:
tablespace TBS_MAK
pctfree 10
initrans 1
maxtrans 255
storage
(
initial 80K
next 1M
minextents 1
maxextents unlimited
)partition by list (RPT_END_DT) automatic
(
partition P_1 values ('1')
tablespace TBS_MAK
pctfree 10
initrans 1
maxtrans 255)row store compress advanced;
2 对于已经存在的非分区表,可通过12C的新语法,在线修改为AUTO LIST 分区表,语法如下:
alter table M_FM_GL_BIZ_STATUS_OLD modify partition by list (RPT_END_DT) automatic
(
partition P_1 values ('1')
tablespace TBS_MAK
pctfree 10
initrans 1
maxtrans 255)row store compress advanced online ;
分区信息查询
--1、如果表里的TABLESPACE_NAME为空,代表是分区表
SELECT A.TABLESPACE_NAME, A.*
FROM USER_TABLES A
WHERE TABLE_NAME = 'M_LN_BB_LOAN_DTL_INFO_D';
--2、分区信息查询
SELECT *
FROM USER_TAB_PARTITIONS
WHERE TABLE_NAME = 'M_LN_BB_LOAN_DTL_INFO_D'