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升级到5.7时,wordpress导数据报错1067的问题
May 27 MySQL
MySql开发之自动同步表结构
May 28 MySQL
MySQL CHAR和VARCHAR该如何选择
May 31 MySQL
MySQL 百万级数据的4种查询优化方式
Jun 07 MySQL
如何使用分区处理MySQL的亿级数据优化
Jun 18 MySQL
MySQL中连接查询和子查询的问题
Sep 04 MySQL
MySQL连接控制插件介绍
Sep 25 MySQL
navicat 连接Ubuntu虚拟机的mysql的操作方法
Apr 02 MySQL
mysql的单列多值存储实例详解
Apr 05 MySQL
MySQL如何使备份得数据保持一致
May 02 MySQL
MySQL数据库安装方法与图形化管理工具介绍
May 30 MySQL
DQL数据查询语句使用示例
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
无线电波是什么?它是怎样传输的?
2021/03/01 无线电
php中过滤非法字符的具体实现
2013/10/29 PHP
php中preg_match的isU代表什么意思
2015/10/01 PHP
php给数组赋值的实例方法
2019/09/26 PHP
JavaScript写的一个自定义弹出式对话框代码
2010/01/17 Javascript
关于二级域名下使用一级域名下的COOKIE的问题
2011/11/07 Javascript
Java/JS获取flash高宽的具体方法
2013/12/27 Javascript
jquery输入数字随机抽奖特效的简单实现代码
2016/06/10 Javascript
vuejs响应用户事件(如点击事件)
2017/03/14 Javascript
浅谈 Vue v-model指令的实现原理
2017/06/08 Javascript
Vue实现内部组件轮播切换效果的示例代码
2018/04/07 Javascript
Vue+mui实现图片的本地缓存示例代码
2018/05/24 Javascript
Vue cli构建及项目打包以及出现的问题解决
2018/08/27 Javascript
Vue使用vue-draggable 插件在不同列表之间拖拽功能
2020/03/12 Javascript
JavaScript事件委托实现原理及优点进行
2020/08/29 Javascript
解决vue 使用axios.all()方法发起多个请求控制台报错的问题
2020/11/09 Javascript
[27:02]2014 DOTA2国际邀请赛中国区预选赛 5 23 CIS VS LGD第三场
2014/05/24 DOTA
Python中的异常处理简明介绍
2015/04/13 Python
浅谈Python2、Python3相对路径、绝对路径导入方法
2018/06/22 Python
python实现windows壁纸定期更换功能
2019/01/21 Python
python实现DEM数据的阴影生成的方法
2019/07/23 Python
python找出列表中大于某个阈值的数据段示例
2019/11/24 Python
python异常处理和日志处理方式
2019/12/24 Python
Python实现点云投影到平面显示
2020/01/18 Python
django在开发中取消外键约束的实现
2020/05/20 Python
如何表示python中的相对路径
2020/07/08 Python
python 下划线的不同用法
2020/10/24 Python
Nike荷兰官方网站:Nike.com (NL)
2018/04/19 全球购物
美国轮胎网站:Priority Tire
2018/11/28 全球购物
速卖通欧盟:Aliexpress EU
2020/08/19 全球购物
成人大专自我鉴定范文
2013/10/19 职场文书
大学生求职简历的自我评价
2013/10/21 职场文书
思想汇报范文
2013/11/04 职场文书
二年级语文上册复习计划
2015/01/19 职场文书
司法廉洁教育心得体会
2016/01/20 职场文书
详解Django的MVT设计模式
2021/04/29 Python