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官方导出工具mysqlpump的使用
May 21 MySQL
mysql 带多个条件的查询方式
Jun 05 MySQL
MySQL开启事务的方式
Jun 26 MySQL
MySQL连表查询分组去重的实现示例
Jul 01 MySQL
sql注入教程之类型以及提交注入
Aug 02 MySQL
mysql 索引合并的使用
Aug 30 MySQL
MySQL分库分表详情
Sep 25 MySQL
MySQL数据库索引的最左匹配原则
Nov 20 MySQL
MySQL数据库⾼可⽤HA实现小结
Jan 22 MySQL
MySQL限制查询和数据排序介绍
Mar 25 MySQL
MySQL 条件查询的常用操作
Apr 28 MySQL
MySQL 计算连续登录天数
May 11 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语法速查表
2007/01/02 PHP
php过滤html中的其他网站链接的方法(域名白名单功能)
2014/04/24 PHP
PHP 设计模式系列之 specification规格模式
2016/01/10 PHP
Javascript typeof 用法
2008/12/28 Javascript
JQuery操作三大控件(下拉,单选,复选)的方法
2013/08/06 Javascript
完美解决IE低版本不支持call与apply的问题
2013/12/05 Javascript
javascript怎么禁用浏览器后退按钮
2014/03/27 Javascript
什么是Node.js?Node.js详细介绍
2014/06/01 Javascript
jQuery实现的支持IE的html滑动条
2015/03/16 Javascript
jquery专业的导航菜单特效代码分享
2015/08/29 Javascript
详解jQuery Mobile自定义标签
2016/01/06 Javascript
浅谈js中的in-for循环
2016/06/28 Javascript
JQuery对ASP.NET MVC数据进行更新删除
2016/07/13 Javascript
jQuery实现遍历复选框的方法示例
2017/03/06 Javascript
微信小程序图片选择区域裁剪实现方法
2017/12/02 Javascript
echarts实现地图定时切换散点与多图表级联联动详解
2018/08/07 Javascript
Vue常见面试题整理【值得收藏】
2018/09/20 Javascript
JavaScript DOM常用操作代码汇总
2020/07/03 Javascript
Python 随机生成中文验证码的实例代码
2013/03/20 Python
python爬取网站数据保存使用的方法
2013/11/20 Python
python目录操作之python遍历文件夹后将结果存储为xml
2014/01/27 Python
轻松掌握python设计模式之策略模式
2016/11/18 Python
python爬虫开发之PyQuery模块详细使用方法与实例全解
2020/03/09 Python
python实现人像动漫化的示例代码
2020/05/17 Python
电子商务自荐书范文
2014/01/04 职场文书
便利店投资的创业计划书
2014/01/12 职场文书
秋游活动策划方案
2014/02/16 职场文书
2014村务公开实施方案
2014/02/25 职场文书
采购意向书范本
2014/03/31 职场文书
公司离职证明范本
2014/10/17 职场文书
2014年最新版离婚协议书范本
2014/11/25 职场文书
个人股份转让协议书范本
2015/01/28 职场文书
道歉信范文
2015/05/12 职场文书
民事二审代理词
2015/05/25 职场文书
会计试用期工作总结2015
2015/05/28 职场文书
Java8利用Stream对列表进行去除重复的方法详解
2022/04/14 Java/Android