分区表概念
当表中的数据量不断增大,查询数据的速度就会变慢,应用程序的性能就会下降,这时就应该考虑对表进行分区。表进行分区后,逻辑上表仍然是一张完整的表,只是将表中的数据在物理上存放到多个表空间(物理文件上),这样查询数据时,不至于每次都扫描整张表。
按照START_TIME字段以一年为跨度建立分区表。
PARTITION BY RANGE(START_TIME)
(
PARTITION p1 VALUES LESS THAN('2019-1-1'),
PARTITION p1 VALUES LESS THAN('2020-1-1'),
PARTITION p1 VALUES LESS THAN('2021-1-1'),
PARTITION p1 VALUES LESS THAN('2022-1-1'),
PARTITION p1 VALUES LESS THAN(maxvalue),
)
在program_id上建立全局索引
create index GINX_TRAIN_PROGRAMID on TRAIN(PROGRAM_ID) GLOBAL
当查询的条件是需要跨分区查询内容的时候,LOCAL INDEX的效率比GLOBAL INDEX的效率要低。
如果查询的条件是在单个分区里面查询的时候,那么LOCAL INDEX的效率比GLOBAL INDEX的效率要高。
建立分区表后,如果要更改分区字段,会报错
ORA-14402: updating partition key column would cause a partition change
这时执行
alter table XXXXX enable row movement;
之后,再执行更改语句即可成功。
参考
oracle分区表之何时使用MAXVALUE分区
Oracle 分区表中本地索引和全局索引的适用场景
oracle表分区详解(按天、按月、按年等)
Oracle数据库表分区