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获取所有分类的前N条记录
May 07 MySQL
MySQL中你可能忽略的COLLATION实例详解
May 12 MySQL
Mysql 用户权限管理实现
May 25 MySQL
新手入门Mysql--概念
Jun 18 MySQL
MySQL系列之七 MySQL存储引擎
Jul 02 MySQL
MySQL一些常用高级SQL语句
Jul 03 MySQL
MySQL分库分表详情
Sep 25 MySQL
MYSQL 表的全面总结
Nov 11 MySQL
MySQL 表锁定 LOCK和UNLOCK TABLES的 SQL语法
Apr 18 MySQL
MySQL视图概念以及相关应用
Apr 19 MySQL
MySQL GTID复制的具体使用
May 20 MySQL
Mysql表数据比较大情况下修改添加字段的方法实例
Jun 28 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
mysql5写入和读出乱码解决
2006/11/25 PHP
PHP中break及continue两个流程控制指令区别分析
2011/04/18 PHP
一个PHP验证码类代码分享(已封装成类)
2011/07/17 PHP
PHP set_error_handler()函数使用详解(示例)
2013/11/12 PHP
php+mysql结合Ajax实现点赞功能完整实例
2015/01/30 PHP
详解WordPress中分类函数wp_list_categories的使用
2016/01/04 PHP
微信公众号开发之文本消息自动回复php代码
2016/08/08 PHP
JavaScript Archive Network 集合
2007/05/12 Javascript
javascript 极速 隐藏/显示万行表格列只需 60毫秒
2009/03/28 Javascript
关于include标签导致js路径找不到的问题分析及解决
2013/07/09 Javascript
JS可以控制样式的名称写法一览
2014/01/16 Javascript
JavaScript接口的实现三种方式(推荐)
2016/06/14 Javascript
Angular2学习笔记——详解NgModule模块
2016/12/02 Javascript
JS组件系列之JS组件封装过程详解
2017/04/28 Javascript
AngularJs实现聊天列表实时刷新功能
2017/06/15 Javascript
基于BootStrap的文本编辑器组件Summernote
2017/10/27 Javascript
使用Angular 6创建各种动画效果的方法
2018/10/10 Javascript
layui 弹出层回调获取弹出层数据的例子
2019/09/02 Javascript
如何使用原生Js实现随机点名详解
2021/01/06 Javascript
[01:08]DOTA2次级职业联赛 - Shield战队宣传片
2014/12/01 DOTA
[01:48]完美圣典齐天大圣至宝宣传片
2016/12/17 DOTA
Python实现测试磁盘性能的方法
2015/03/12 Python
详解设计模式中的工厂方法模式在Python程序中的运用
2016/03/02 Python
在PyCharm环境中使用Jupyter Notebook的两种方法总结
2018/05/24 Python
python将list转为matrix的方法
2018/12/12 Python
Python3 webservice接口测试代码详解
2020/06/23 Python
Python读写压缩文件的方法
2020/07/30 Python
html5 Canvas画图教程(8)—canvas里画曲线之bezierCurveTo方法
2013/01/09 HTML / CSS
澳大利亚领先的运动鞋商店:Hype DC
2018/03/31 全球购物
智能电子应届生求职信
2013/11/10 职场文书
民用住房租房协议书
2014/10/29 职场文书
行政申诉状范文
2015/05/20 职场文书
离婚上诉状范文
2015/05/23 职场文书
幼儿园新生开学寄语
2015/05/27 职场文书
祝福语集锦:给满月宝宝的祝福语
2019/11/20 职场文书
Linux中如何安装并部署Redis
2022/04/18 Servers