MySQL分区之子分区详解

 更新时间:2022年04月13日 10:46:57   作者:pursuer.chen  
子分区(subpartition)是分区表中对每个分区的再次分割,又被称为复合分区,下面这篇文章主要给大家介绍了关于MySQL分区之子分区的相关资料,文中通过示例代码介绍的非常详细,需要的朋友可以参考下

介绍

子分区其实是对每个分区表的每个分区进行再次分隔,目前只有RANGE和LIST分区的表可以再进行子分区,子分区只能是HASH或者KEY分区。子分区可以将原本的数据进行再次的分区划分。

一、创建子分区

子分区由两种创建方法,一种是不定义每个子分区子分区的名字和路径由分区决定,二是定义每个子分区的分区名和各自的路径

1.不定义每个子分区

CREATE TABLE tb_sub (id INT, purchased DATE)
    PARTITION BY RANGE( YEAR(purchased) )
    SUBPARTITION BY HASH( TO_DAYS(purchased) )
    SUBPARTITIONS 2 (
        PARTITION p0 VALUES LESS THAN (1990),
        PARTITION p1 VALUES LESS THAN (2000),
        PARTITION p2 VALUES LESS THAN MAXVALUE
    );
SELECT PARTITION_NAME,PARTITION_METHOD,PARTITION_EXPRESSION,PARTITION_DESCRIPTION,TABLE_ROWS,SUBPARTITION_NAME,SUBPARTITION_METHOD,SUBPARTITION_EXPRESSION 
FROM information_schema.PARTITIONS WHERE TABLE_SCHEMA=SCHEMA() AND TABLE_NAME='tb_sub';

2.定义每个子分区

定义子分区可以为每个子分区定义具体的分区名和分区路径

CREATE TABLE tb_sub_ev (id INT, purchased DATE)
    PARTITION BY RANGE( YEAR(purchased) )
    SUBPARTITION BY HASH( TO_DAYS(purchased) ) (
        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
        )
    );

3.测试数据

INSERT INTO tb_sub_ev() VALUES(1,'1989-01-01'),(2,'1989-03-19'),(3,'1989-04-19');

当往里面插入三条记录时,其中‘1989-01-01’和‘1989-04-19’存储在p0_s0分区中,‘1989-03-19’存储在p0_s1当中

二、分区管理

分区管理和RANGE、LIST的分区管理是一样的

1.合并分区

将p0,p1两个分区合并

ALTER TABLE tb_sub_ev REORGANIZE PARTITION p0,p1 INTO (
    PARTITION m1 VALUES LESS THAN (2000)
    ( SUBPARTITION n0,
      SUBPARTITION n1
     ) 
    
);

注意:合并分区的子分区也必须是两个,这点需要理解,因为必须和创建分区时每个分区只有两个子分区保持一致,合并分区不会造成数据的丢失。

2.拆分分区

ALTER TABLE tb_sub_ev REORGANIZE PARTITION m1 INTO (
     PARTITION p0 VALUES LESS THAN (1990) (
            SUBPARTITION s0,
            SUBPARTITION s1
        ),
        PARTITION p1 VALUES LESS THAN (2000) (
            SUBPARTITION s2,
            SUBPARTITION s3
        )
    
);

同样,拆分分区也必须保证每个分区是两个子分区。

3.删除分区

ALTER TABLE  tb_sub_ev DROP PARTITION P0;

注意:由于分区是RANGE和LIST分区,所以删除分区也是同RANGE和LIST分区一样,这里只能对每个分区进行删除,不能针对每个子分区进行删除操作,删除分区后子分区连同数据一并被删除。

三、错误的子分区创建

1.要不不定义各个子分区要不就每个都需要定义

CREATE TABLE tb_sub_ev_nex (id INT, purchased DATE)
    PARTITION BY RANGE( YEAR(purchased) )
    SUBPARTITION BY HASH( TO_DAYS(purchased) ) (
        PARTITION p0 VALUES LESS THAN (1990) (
            SUBPARTITION s0,
            SUBPARTITION s1
        ),
        PARTITION p1 VALUES LESS THAN (2000),
        PARTITION p2 VALUES LESS THAN MAXVALUE (
            SUBPARTITION s4,
            SUBPARTITION s5
        )
    );

这里由于分区p1没有定义子分区,所以创建分区失败

四、移除表的分区

ALTER TABLE tablename
REMOVE PARTITIONING ;

注意:使用remove移除分区是仅仅移除分区的定义,并不会删除数据和drop PARTITION不一样,后者会连同数据一起删除

分区系列文章:

RANGE分区:https://www.jb51.net/article/244269.htm

COLUMN分区:https://www.jb51.net/article/96515.htm

LIST分区:https://www.jb51.net/article/244256.htm

HASH分区:https://www.jb51.net/article/244277.htm

KEY分区:https://www.jb51.net/article/244282.htm

子分区:https://www.jb51.net/article/244294.htm

指定各分区路径:https://www.jb51.net/article/244296.htm

分区索引以及分区介绍总结:https://www.jb51.net/article/244300.htm

总结

子分区的好处是可以对分区的数据进行再分,这样数据就更加的分散,同时还可以对每个子分区定义各自的存储路径,这部分内容在指定各分区路径的下一篇文章中单独进行讲解。

到此这篇关于MySQL分区之子分区的文章就介绍到这了,更多相关MySQL 子分区内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • MySQL中的最左匹配原则

    MySQL中的最左匹配原则

    这篇文章主要介绍了MySQL中的最左匹配原则,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-09-09
  • 快速学习MySQL基础知识

    快速学习MySQL基础知识

    这篇文章主要介绍了MySQL基础知识的相关资料,文中讲解非常细致,帮助大家更好的理解和学习,感兴趣的朋友可以了解下
    2020-07-07
  • 数据库设计工具MySQL Workbench使用教程(超级详细!)

    数据库设计工具MySQL Workbench使用教程(超级详细!)

    MySQL Workbench为数据库管理员、程序开发者和系统规划师提供可视化的Sql开发、数据库建模、以及数据库管理功能,下面这篇文章主要给大家介绍了关于MySQL设计工具Workbench使用的相关资料,需要的朋友可以参考下
    2023-02-02
  • InnoDB解决幻读的方法详解

    InnoDB解决幻读的方法详解

    这篇文章主要介绍了InnoDB解决幻读的方法详解的相关资料,需要的朋友可以参考下
    2023-04-04
  • MYSQL表中某字段所有值大小写转换

    MYSQL表中某字段所有值大小写转换

    这篇文章主要为大家介绍了MYSQL表中某字段所有值大小写转换示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-09-09
  • MySQL主从同步机制与同步延时问题追查过程

    MySQL主从同步机制与同步延时问题追查过程

    这篇文章主要给大家介绍了关于MySQL主从同步机制与同步延时问题追查的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2019-02-02
  • Mysql 5.7.9 shutdown 语法实例详解

    Mysql 5.7.9 shutdown 语法实例详解

    之前如果想关闭一个mysql数据库可以通过kill 命令、mysqladmin shutdown 、service mysqld stop 等这样的方式。然而在mysql-5.7.9之后mysql终于提供了SQL接口的shutdown语法啦
    2017-06-06
  • MySQL 元数据查看及实例代码

    MySQL 元数据查看及实例代码

    这篇文章主要介绍了MySQL 元数据查看及实例代码的相关资料,需要的朋友可以参考下
    2017-01-01
  • sqoop export导出 map100% reduce0% 卡住的多种原因及解决

    sqoop export导出 map100% reduce0% 卡住的多种原因及解决

    这篇文章主要介绍了sqoop export导出 map100% reduce0% 卡住的多种原因及解决,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-01-01
  • Linux下mysql 5.6.17 安装图文教程

    Linux下mysql 5.6.17 安装图文教程

    这篇文章主要为大家详细介绍了Linux下mysql 5.6.17 安装图文教程,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2016-09-09

最新评论