LIST分区表
如果分区列是不连续的,那么范围分区将不再适用,这时候如果分区列上有一些固定的值,那么可以进行列表分区。
建表
CREATE TABLE HA.CITYS(
CITY VARCHAr(50),
PEOPLE VARCHAr(50)
)
PARTITION BY LIST(CITY)(
PARTITION P1 VALUES(‘北京’,‘天津’),
PARTITION P2 VALUES(‘郑州’,‘武汉’)
);
COMMIT;
插入数据
INSERT INTO HA.CITYS VALUES(‘北京’,‘赵剑’);
INSERT INTO HA.CITYS VALUES(‘天津’,‘刘华’);
INSERT INTO HA.CITYS VALUES(‘武汉’,‘吴枫’);
INSERT INTO HA.CITYS VALUES(‘郑州’,‘王鹏’);
COMMIT;
查询
SQL> SELECt * FROM HA.CITYS PARTITION(P1);
行号 CITY PEOPLE
1 北京 赵剑
2 天津 刘华
已用时间: 41.528(毫秒). 执行号:16.
SQL> SELECt * FROM HA.CITYS PARTITION(P2);
行号 CITY PEOPLE
1 武汉 吴枫
2 郑州 王鹏
已用时间: 0.787(毫秒). 执行号:17.
如果CITY不在分区里面怎么办
SQL> insert into ha.citys values(‘上海’,‘李娇’);
insert into ha.citys values(‘上海’,‘李娇’);
已用时间: 3.747(毫秒). 执行号:0.
SQL>
这种情况是根本无法插入数据的。
哈希分区表
哈希分区表是针对上面这种情况而设计的,有时候,分区列是离散的,且值的范围也不固定,这时候就要用到哈希分区表了。它在指定数量的分区中均等地划分数据。
建表
CREATE TABLE HA.HASHCITYS(
CITY VARCHAr(50),
PEOPLE VARCHAr(50)
)
PARTITION BY HASH(CITY)(
PARTITION P1,
PARTITION P2
);
COMMIT;
插入数据
INSERT INTO HA.HASHCITYS VALUES(‘北京’,‘赵剑’);
INSERT INTO HA.HASHCITYS VALUES(‘天津’,‘刘华’);
INSERT INTO HA.HASHCITYS VALUES(‘武汉’,‘吴枫’);
INSERT INTO HA.HASHCITYS VALUES(‘郑州’,‘王鹏’);
COMMIT;
查询
SQL> SELECt * FROM HA.HASHCITYS PARTITION(P1);
行号 CITY PEOPLE
1 武汉 吴枫
2 郑州 王鹏
已用时间: 0.706(毫秒). 执行号:26.
SQL> SELECt * FROM HA.HASHCITYS PARTITION(P2);
行号 CITY PEOPLE
1 北京 赵剑
2 天津 刘华
已用时间: 0.765(毫秒). 执行号:27.
这部分和列表分区是一样的。
插入数据
SQL> INSERT INTO HA.HASHCITYS VALUES(‘上海’,‘李娇’);
影响行数 1
已用时间: 0.805(毫秒). 执行号:28.
SQL> COMMIT;
操作已执行
已用时间: 2.454(毫秒). 执行号:29.
这里却能插入成功
查询
SQL> SELECt * FROM HA.HASHCITYS PARTITION(P2);
行号 CITY PEOPLE
1 北京 赵剑
2 天津 刘华
3 上海 李娇
已用时间: 0.447(毫秒). 执行号:32.
可以看到这条记录被自动划分到了P2分区当中。
多级分区表
有时候一次分区并不能准确地对数据进行分类,这时候就需要进行多级分区。
下面做一个三级分区。第一级:基于年级的列表分区。第二级:基于性别的列表分区。第三级:基于分数的范围分区。
建表
CREATE TABLE HA.STUDENTS(
NAME VARCHAr(50),
GRADE INT CHECK (GRADE IN (7,8,9)),
SEX CHAr(2) CHECK (SEX IN (‘男’,‘女’)),
CORES INT CHECK (CORES>=0 AND CORES<=100)
)
PARTITION BY LIST(GRADE)
SUBPARTITION BY LIST(SEX) SUBPARTITION TEMPLATE(
SUBPARTITION S1 VALUES (‘男’),
SUBPARTITION S2 VALUES (‘女’)
),
SUBPARTITION BY RANGE(CORES) SUBPARTITION TEMPLATE(
SUBPARTITION C1 VALUES LESS THAN (
【一线大厂Java面试题解析+后端开发学习笔记+最新架构讲解视频+实战项目源码讲义】 浏览器打开:qq.cn.hn/FTf 开源分享
60),
SUBPARTITION C2 VALUES LESS THAN (80),
SUBPARTITION C3 VALUES LESS THAN (100)
)
(
PARTITION G1 VALUES (7),
PARTITION G2 VALUES (8),
PARTITION G3 VALUES (9)
);
插入数据
INSERT INTO HA.STUDENTS VALUES(‘林华’,7,‘男’,59);
INSERT INTO HA.STUDENTS VALUES(‘刘烨’,8,‘男’,69);
INSERT INTO HA.STUDENTS VALUES(‘赵剑’,9,‘男’,81);
INSERT INTO HA.STUDENTS VALUES(‘刘蕾’,7,‘女’,58);
INSERT INTO HA.STUDENTS VALUES(‘张月’,8,‘女’,91);
INSERT INTO HA.STUDENTS VALUES(‘贺兰’,9,‘女’,71);
INSERT INTO HA.STUDENTS VALUES(‘许昕’,7,‘女’,75);
INSERT INTO HA.STUDENTS VALUES(‘秦楠’,7,‘男’,58);
INSERT INTO HA.STUDENTS VALUES(‘叶秋’,9,‘男’,88);
COMMIT;
查询
第一级
SQL> SELECt* FROM HA.STUDENTS PARTITION(G1);
行号 NAME GRADE SEX CORES
1 林华 7 男 59
2 秦楠 7 男 58
3 刘蕾 7 女 58
4 许昕 7 女 75
已用时间: 1.365(毫秒). 执行号:46.
SQL> SELECt* FROM HA.STUDENTS PARTITION(G2);
行号 NAME GRADE SEX CORES
1 刘烨 8 男 69
2 张月 8 女 91
已用时间: 1.656(毫秒). 执行号:47.
SQL> SELECt* FROM HA.STUDENTS PARTITION(G3);
行号 NAME GRADE SEX CORES
1 赵剑 9 男 81
2 叶秋 9 男 88
3 贺兰 9 女 71
已用时间: 1.349(毫秒). 执行号:48.
第二级
SQL> SELECt * FROM HA.STUDENTS SUBPARTITION(G1_S1);
S
行号 NAME GRADE SEX CORES
1 林华 7 男 59
2 秦楠 7 男 58
已用时间: 2.090(毫秒). 执行号:76.
以上语句的作用是查询7年级的所有男生的信息;
第三级



