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 相关文章推荐
MySql学习笔记之事务隔离级别详解
May 12 MySQL
MySQL 视图(View)原理解析
May 19 MySQL
MySQL开启事务的方式
Jun 26 MySQL
关于k8s环境部署mysql主从的问题
Mar 13 MySQL
MySQL分区以及建索引的方法总结
Apr 13 MySQL
MySQL时区造成时差问题
Apr 13 MySQL
解决Mysql报错 Table 'mysql.user' doesn't exist
May 06 MySQL
Mysql 一主多从的部署
May 20 MySQL
MySQL选择合适的备份策略和备份工具
Jun 01 MySQL
mysql sock 文件解析及作用讲解
Jul 15 MySQL
jdbc中自带MySQL 连接池实践示例
Jul 23 MySQL
详解MySQL的内连接和外连接
May 08 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
PHP extract 将数组拆分成多个变量的函数
2010/06/30 PHP
php中get_headers函数的作用及用法的详细介绍
2013/04/27 PHP
php中实现记住密码下次自动登录的例子
2014/11/06 PHP
php生成静态html页面的方法(2种方法)
2015/09/14 PHP
PHP判断来访是搜索引擎蜘蛛还是普通用户的代码小结
2015/09/14 PHP
功能强大的php分页函数
2016/07/20 PHP
关于JQuery($.load)事件的用法和分析
2013/04/09 Javascript
js 动态修改css文件用到了cssRule
2014/08/20 Javascript
jQuery选择器源码解读(四):tokenize方法的Expr.preFilter
2015/03/31 Javascript
浅析四种常见的Javascript声明循环变量的书写方式
2015/10/14 Javascript
js clearInterval()方法的定义和用法
2015/11/11 Javascript
JavaScript常用字符串与数组扩展函数小结
2016/04/24 Javascript
微信小程序开发经验总结(推荐)
2017/01/11 Javascript
Javascript基础回顾之(三) js面向对象
2017/01/31 Javascript
基于vue实现多引擎搜索及关键字提示
2017/03/16 Javascript
es6在react中的应用代码解析
2017/11/08 Javascript
jquery ztree实现右键收藏功能
2017/11/20 jQuery
12条写出高质量JS代码的方法
2018/01/07 Javascript
Vue-CLI 3.X 部署项目至生产服务器的方法
2019/03/22 Javascript
小程序实现搜索界面 小程序实现推荐搜索列表效果
2019/05/18 Javascript
webpack是如何实现模块化加载的方法
2019/11/06 Javascript
使用vant的地域控件追加全部选项
2020/11/03 Javascript
使用python搭建Django应用程序步骤及版本冲突问题解决
2013/11/19 Python
Python实现生成简单的Makefile文件代码示例
2015/03/10 Python
浅谈Python基础之I/O模型
2017/05/11 Python
python3实现爬取淘宝美食代码分享
2018/09/23 Python
Python高并发解决方案实现过程详解
2020/07/31 Python
2014年情人节活动方案
2014/02/16 职场文书
乡镇干部十八大感言
2014/02/17 职场文书
爱国卫生月活动总结范文
2014/04/25 职场文书
2014年四风问题自我剖析材料
2014/09/15 职场文书
简单租房协议书(范本)
2014/10/13 职场文书
《改造我们的学习》心得体会
2014/11/07 职场文书
2014年人大工作总结
2014/12/10 职场文书
文体活动总结
2015/02/04 职场文书
PHP新手指南
2021/04/01 PHP