在项目中,遇到数据量多的时候,开始考虑使用年份表,不同年份创建一个年份表,后期需求改动,需要实现跨年查询操作,由于数据量大,跨年份查询涉及多表关联,查询起来速度较慢。所以考虑到使用分区表的方式,按照年份分区操作。
一、分区为number类型
如下,是按照年份分区的,其中年份字段是number类型,interval 设置为‘1’,即以‘1’为单位进行分区,默认先创建一个
CREATE TABLE testzone1
(
id NUMBER(10) NOT NULL PRIMARY KEY,
pid number(10),
attributeNo varchar2(255),
attributeName varchar2(255),
attributeValue varchar2(4000),
compactYear number(10)
) PARTITION BY range (compactYear) interval (1)
(
PARTITION p3 VALUES less than(2017)
);
表创建完成后给表创建自动增长的sequence:
CREATE SEQUENCE SEQ_testzone1 INCREMENT BY 1 START WITH 1 NOMAXVALUE NOCYCLE NOCACHE;
此时生成一个分区,打开plsql可以看到,出现了分区
接下来插入一条数据,执行如下sql,
insert into testzone1 (id,pid,attributeNo,attributename,compactyear) values(SEQ_testzone1.Nextval,1,'1','1',2016);
注意这里的年份写的是‘2016’,一开始我以为会在Partitions增加一条分区记录,查看表结构时发现并没有增加分区记录,仍然是只有一个‘2017’的分区。
接下来再插入一条数据,此时把年份改为‘2017’,执行如下sql,
insert into testzone1 (id,pid,attributeNo,attributename,compactyear) values(SEQ_testzone1.Nextval,1,'2','2',2017);
再次查看表结构,此时系统默认创建了一条分区记录: