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批量新增和存储的方法实例
Apr 07 MySQL
mysql死锁和分库分表问题详解
Apr 16 MySQL
MySQL之PXC集群搭建的方法步骤
May 25 MySQL
MySQL 常见的数据表设计误区汇总
Jun 07 MySQL
mysql 直接拷贝data 目录下文件还原数据的实现
Jul 25 MySQL
SQL实现LeetCode(180.连续的数字)
Aug 04 MySQL
mysql 生成连续日期及变量赋值
Mar 20 MySQL
MySQL磁盘碎片整理实例演示
Apr 03 MySQL
进阶篇之linux环境下安装MySQL数据库
Apr 09 MySQL
排查并解决MySQL生产库内存使用率高的报警
Apr 11 MySQL
MySQL创建管理子分区
Apr 13 MySQL
MySQL的存储过程和相关函数
Apr 26 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
详细介绍:Apache+PHP+MySQL配置攻略
2006/09/05 PHP
PHP 双链表(SplDoublyLinkedList)简介和使用实例
2015/05/12 PHP
PHP之密码加密的几种方式
2015/07/29 PHP
关于PHP中字符串与多进制转换函数的实例代码
2016/11/03 PHP
Laravel框架查询构造器 CURD操作示例
2019/09/04 PHP
国外的为初学者写的JavaScript教程
2008/06/09 Javascript
javascript 使td内容不换行不撑开
2012/11/29 Javascript
JS判断数组中是否有重复值得三种实用方法
2013/08/16 Javascript
Function.prototype.bind用法示例
2013/09/16 Javascript
js正则表达exec与match的区别说明
2014/01/29 Javascript
js 获取、清空input type="file"的值示例代码
2014/02/19 Javascript
JavaScript日期时间格式化函数分享
2014/05/05 Javascript
Jquery实现仿腾讯娱乐频道焦点图(幻灯片)特效
2015/03/06 Javascript
IE8下jQuery改变png图片透明度时出现的黑边
2015/08/30 Javascript
js倒计时简单实现方法
2015/12/17 Javascript
谈一谈javascript中继承的多种方式
2016/02/19 Javascript
Bootstrap项目实战之子栏目资讯内容
2016/04/25 Javascript
vue如何限制只能输入正负数及小数
2019/07/04 Javascript
js+css3实现简单时钟特效
2020/09/13 Javascript
[01:09:40]Newbee vs Pain 2018国际邀请赛小组赛BO2 第一场 8.16
2018/08/17 DOTA
Django URL传递参数的方法总结
2016/08/28 Python
在python里协程使用同步锁Lock的实例
2019/02/19 Python
python占位符输入方式实例
2019/05/27 Python
python实现简单贪吃蛇游戏
2020/09/29 Python
python实现测试工具(二)——简单的ui测试工具
2020/10/19 Python
selenium3.0+python之环境搭建的方法步骤
2021/02/01 Python
新加坡时尚网上购物:Zalora新加坡
2016/07/26 全球购物
Amara德国:家居饰品、设计师品牌和豪华礼品
2019/05/20 全球购物
英国最大的割草机购买网站:Just Lawnmowers
2019/11/02 全球购物
市场营销工作计划书
2014/09/15 职场文书
小学生校园广播稿
2014/09/28 职场文书
针对吵架老公保证书
2015/05/08 职场文书
考研英语辞职信
2015/05/13 职场文书
2015年食品安全宣传周活动总结
2015/07/09 职场文书
优秀学生干部主要事迹材料
2015/11/04 职场文书
springboot 全局异常处理和统一响应对象的处理方式
2022/06/28 Java/Android