MySQL创建管理子分区


Posted in MySQL onApril 13, 2022

介绍

子分区其实是对每个分区表的每个分区进行再次分隔,目前只有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';

MySQL创建管理子分区

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
        )
    );

MySQL创建管理子分区

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当中

MySQL创建管理子分区

MySQL创建管理子分区

二、分区管理

分区管理和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
     ) 
    
);

MySQL创建管理子分区

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

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不一样,后者会连同数据一起删除

总结

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

到此这篇关于MySQL分区之子分区的文章就介绍到这了!

MySQL 相关文章推荐
IDEA 链接Mysql数据库并执行查询操作的完整代码
May 20 MySQL
MySQL中distinct与group by之间的性能进行比较
May 26 MySQL
如何搭建 MySQL 高可用高性能集群
Jun 21 MySQL
Mysql中调试存储过程最简单的方法
Jun 30 MySQL
MySQL系列之七 MySQL存储引擎
Jul 02 MySQL
MySQL如何解决幻读问题
Aug 07 MySQL
Mysql中一千万条数据怎么快速查询
Dec 06 MySQL
Nebula Graph解决风控业务实践
Mar 31 MySQL
提高系统的吞吐量解决数据库重复写入问题
Apr 23 MySQL
解决Mysql中的innoDB幻读问题
Apr 29 MySQL
Mysql如何查看是否使用到索引
Dec 24 MySQL
MySQL创建管理KEY分区
Apr 13 #MySQL
MySQL创建管理HASH分区
Apr 13 #MySQL
MySQL创建管理RANGE分区
Apr 13 #MySQL
MySQL创建管理LIST分区
Apr 13 #MySQL
MySql分区类型及创建分区的方法
Apr 13 #MySQL
深入理解mysql事务隔离级别和存储引擎
mysql使用 not int 子查询隐含陷阱
Apr 12 #MySQL
You might like
150kHz到30Mhz完全冲浪手册
2020/03/20 无线电
PHP实现自动对图片进行滚动显示的方法
2015/03/12 PHP
PHP里的单例类写法实例
2015/06/25 PHP
PHP实现linux命令tail -f
2016/02/22 PHP
Discuz论坛密码与密保加密规则
2016/12/19 PHP
PHP4和PHP5版本下解析XML文档的操作方法实例分析
2017/05/20 PHP
PHP+MySQL实现在线测试答题实例
2020/01/02 PHP
PHP基于ip2long实现IP转换整形
2020/12/11 PHP
js中设置元素class的三种方法小结
2011/08/28 Javascript
ANT 压缩(去掉空格/注释)JS文件可提高js运行速度
2013/04/15 Javascript
jquery实现可关闭的倒计时广告特效代码
2015/09/02 Javascript
谈谈Jquery ajax中success和complete有哪些不同点
2015/11/20 Javascript
JavaScript基本类型值-Number类型
2017/02/24 Javascript
AngularJS实现自定义指令及指令配置项的方法
2017/11/20 Javascript
Vue实现搜索结果高亮显示关键字
2019/05/28 Javascript
vue实现分环境打包步骤(给不同的环境配置相对应的打包命令)
2019/06/04 Javascript
webpack打包html里面img后src为“[object Module]”问题
2019/12/22 Javascript
python在指定目录下查找gif文件的方法
2015/05/04 Python
Python封装shell命令实例分析
2015/05/05 Python
使用Python发送各种形式的邮件的方法汇总
2015/11/09 Python
利用python库在局域网内传输文件的方法
2018/06/04 Python
Python对ElasticSearch获取数据及操作
2019/04/24 Python
python导包的几种方法(自定义包的生成以及导入详解)
2019/07/15 Python
Django REST framework内置路由用法
2019/07/26 Python
python os.fork() 循环输出方法
2019/08/08 Python
详解Tensorflow不同版本要求与CUDA及CUDNN版本对应关系
2020/08/04 Python
css3实现超炫风车特效
2014/11/12 HTML / CSS
HTML5使用ApplicationCache接口实现离线缓存技术解决离线难题
2012/12/13 HTML / CSS
学习党章思想汇报
2014/01/07 职场文书
元旦红领巾广播稿
2014/02/19 职场文书
营销与策划实训报告
2014/11/05 职场文书
商务邀请函
2015/01/30 职场文书
董事长秘书岗位职责
2015/02/13 职场文书
何玥事迹观后感
2015/06/16 职场文书
2019安全宣传标语大全
2019/08/14 职场文书
MySql分区类型及创建分区的方法
2022/04/13 MySQL