MySQL中的复合分区(附带实例)
复合分区是分区表中每个分区的再次分割,子分区既可以使用 HASH 分区,也可以使用 KEY 分区。
复合分区需要注意以下问题:
下面通过案例讲述不同的复合分区的创建方法。
1) 创建 RANGE - HASH 复合分区的命令如下:
2) 创建 RANGE - KEY 复合分区的命令如下:
3) 创建 LIST - HASH 复合分区的命令如下:
4) 创建 LIST - KEY 复合分区的命令如下:
复合分区需要注意以下问题:
- 如果一个分区中创建了复合分区,则其他分区也要有复合分区;
- 如果创建了复合分区,则每个分区中的复合分区数必须相同;
- 同一分区内的复合分区的名字不相同,不同分区内的复合分区的名字可以相同。
下面通过案例讲述不同的复合分区的创建方法。
1) 创建 RANGE - HASH 复合分区的命令如下:
mysql> create table rhtable( no varchar(20) not null, name varchar(20), deptno int, birthdate date not null, salary int ) partition by range(salary) subpartition by hash(year(birthdate)) subpartitions 3 ( partition p1 values less than (2000), partition p2 values less than maxvalue ); Query OK, 0 rows affected (0.23 sec)
2) 创建 RANGE - KEY 复合分区的命令如下:
mysql> create table rktable( no varchar(20) not null, name varchar(20), deptno int, birth date not null, salary int ) partition by range(salary) subpartition by key(birth) subpartitions 3 ( partition p1 values less than (2000), partition p2 values less than maxvalue ); Query OK, 0 rows affected (0.07 sec)
3) 创建 LIST - HASH 复合分区的命令如下:
mysql> create table lhtable( no varchar(20) not null, name varchar(20), deptno int, birth date not null, salary int ) partition by list(deptno) subpartition by hash( year(birth) ) subpartitions 3 ( partition p1 values in (10), partition p2 values in (20) ); Query OK, 0 rows affected (0.08 sec)
4) 创建 LIST - KEY 复合分区的命令如下:
mysql> create table lktable( no varchar(20) not null, name varchar(20), deptno int, birthdate date not null, salary int ) partition by list(deptno) subpartition by key(birthdate) subpartitions 3 ( partition p1 values in (10), partition p2 values in (20) ); Query OK, 0 rows affected (0.09 sec)