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 相关文章推荐
数据库连接池
Apr 06 MySQL
MySQL 表空间碎片的概念及相关问题解决
May 07 MySQL
MySQL之PXC集群搭建的方法步骤
May 25 MySQL
安装配置mysql及Navicat prenium的详细流程
Jun 10 MySQL
MySQL 如何设计统计数据表
Jun 15 MySQL
mysql连接查询中and与where的区别浅析
Jul 01 MySQL
SQL实现LeetCode(197.上升温度)
Aug 07 MySQL
Mysql数据库手动及定时备份步骤
Nov 07 MySQL
MySQL数据库索引的最左匹配原则
Nov 20 MySQL
详解MySQL中timestamp和datetime时区问题导致做DTS遇到的坑
Dec 06 MySQL
MySQL数据库完全卸载的方法
Mar 03 MySQL
MySQL事务的ACID特性以及并发问题方案
Jul 15 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
老机欣赏|中国60年代精品收音机
2021/03/02 无线电
基于empty函数的输出详解
2013/06/17 PHP
Smarty中常用变量操作符汇总
2014/10/27 PHP
PHP数组与对象之间使用递归实现转换的方法
2015/06/24 PHP
Thinkphp结合AJAX长轮询实现PC与APP推送详解
2017/07/31 PHP
jquery 简单图片导航插件jquery.imgNav.js
2010/03/17 Javascript
js弹出层之1:JQuery.Boxy (二)
2011/10/06 Javascript
node.js中的fs.readdir方法使用说明
2014/12/17 Javascript
Javascript闭包用法实例分析
2015/01/23 Javascript
AngularJS语法详解
2015/01/23 Javascript
JavaScript插件化开发教程 (三)
2015/01/27 Javascript
谈谈对offsetleft兼容性的理解
2015/11/11 Javascript
jquery attr()设置和获取属性值实例教程
2016/09/25 Javascript
jQuery扩展实现text提示还能输入多少字节的方法
2016/11/28 Javascript
JavaScript闭包和范围实例详解
2016/12/19 Javascript
使用jQuery.Pin垂直滚动时固定导航
2017/05/24 jQuery
微信小程序实现页面浮动导航
2019/01/28 Javascript
JS使用正则表达式判断输入框失去焦点事件
2019/10/16 Javascript
mpvue实现小程序签到金币掉落动画(api实现)
2019/10/17 Javascript
JavaScript 函数用法详解【函数定义、参数、绑定、作用域、闭包等】
2020/05/12 Javascript
js实现纯前端压缩图片
2020/11/16 Javascript
[49:02]KG vs Infamous 2019国际邀请赛淘汰赛 败者组BO1 8.20.mp4
2020/07/19 DOTA
Python实现的计数排序算法示例
2017/11/29 Python
Sublime开发python程序的示例代码
2018/01/24 Python
关于Tensorflow中的tf.train.batch函数的使用
2018/04/24 Python
python RC4加密操作示例【测试可用】
2019/09/26 Python
Python爬虫使用代理IP的实现
2019/10/27 Python
python绘制BA无标度网络示例代码
2019/11/21 Python
OpenCV4.1.0+VS2017环境配置的方法步骤
2020/07/09 Python
pyspark对Mysql数据库进行读写的实现
2020/12/30 Python
详解CSS3原生支持div铺满浏览器的方法
2018/08/30 HTML / CSS
校园之声广播稿
2014/01/31 职场文书
党建工作经验交流材料
2014/05/25 职场文书
酒店圣诞节活动总结
2015/05/06 职场文书
导游词之贵州百里杜鹃
2019/10/29 职场文书
python 解决微分方程的操作(数值解法)
2021/05/26 Python