14.子分区(复合分区)与分区中对NULL的处理

1.何为子分区?

子分区顾名思义,就是在分区中再创建分区,达到对数据的细腻化操作。
MySQL数据库中允许在RANGE和LIST的分区上再进行HASH分区或KEY分区。

2.实例学习

运行下面语句:

CREATE TABLE ts(
    a int,
    b date
)
partition by range (year(b))
subpartition by hash(to_days(b))
subpartitions 2(
    partition p0 values less than (1990),
    partition p1 values less than (2000),
    partition p2 values less than maxvalue
);

上面的分区语句首先根据b的年份创建三个分区1990,2000,maxvalue,然后再将这三个分区根据天再分成两个小分区,所以其实总共有6个分区。
如图:
在这里插入图片描述

可以看到mysql分别创建了6个物理文件存放这6个分区的数据。

通过上面的语句我们可以看到使用的子分区是默认的命名,我们也可以显式的定义各个子分区的名字:

CREATE TABLE ts(
    a int,
    b date
)
partition by range ( year(b))
subpartition by hash( to_days(b))(
    partition p0 values less than(1990)(
        subpartition s0,
        subpartition s1    
    ),
    partition p1 values less than(2000)(
        subpartition s2,
        subpartition s3    
    ),
    partition p2 values less than maxvalue (
        subpartition s4,
        subpartition s5    
    )
);

在这里插入图片描述

在使用分区时,注意:
1)每个子分区的数量必须一致
2)如果在一个分区表中的任何分区上使用SUBPARTITION来明确定义任何子分区,那么就必须定义所有的子分区
3)每个SUBPARTITION子句必须包括子分区的一个名字
4)子分区的名字必须是唯一的

3.分区中对NULL的处理

对于MySQL需要记住:
在RANGE分区下,NULL会被放入最左边的分区中
在LIST分区中使用NULL,必须显式地指出在那个分区中放入NULL值,否则数据库会报错。
HASH和KEY分区对NULL的处理方式与RANGE和LIST分区不一样,任何分区函数都将会含有NULL值的记录返回为0,也就是会放在P0分区中。

おすすめ

転載: blog.csdn.net/c1776167012/article/details/121041555