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 05 MySQL
MySQL命令行操作时的编码问题详解
Apr 14 MySQL
Mysql基础知识点汇总
May 26 MySQL
Mysql数据库索引面试题(程序员基础技能)
May 31 MySQL
MySQL系列之二 多实例配置
Jul 02 MySQL
MySQL千万级数据表的优化实战记录
Aug 04 MySQL
SQL实现LeetCode(180.连续的数字)
Aug 04 MySQL
一文弄懂MySQL索引创建原则
Feb 28 MySQL
如何创建一个创建MySQL数据库中的datetime类型
Mar 21 MySQL
关于MySQL临时表为什么可以重名的问题
Mar 22 MySQL
mysql数据库隔离级别详解
Jun 16 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
?繁体转换的class
2006/10/09 PHP
用PHP查询搜索引擎排名位置的代码
2010/01/05 PHP
初识PHP
2014/09/28 PHP
php实现文本数据导入SQL SERVER
2015/05/17 PHP
Nigma vs AM BO3 第一场2.13
2021/03/10 DOTA
免费空间广告万能消除代码
2006/09/04 Javascript
$.each与$().each的区别示例介绍
2014/03/20 Javascript
Javascript 多物体运动的实现
2014/12/24 Javascript
将页面table内容与样式另存成excel文件的方法
2015/08/05 Javascript
jQuery图片轮播滚动切换代码分享
2020/04/20 Javascript
Javascript 字符串模板的简单实现
2016/02/13 Javascript
Bootstrap表单Form全面解析
2016/06/13 Javascript
第三篇Bootstrap网格基础
2016/06/21 Javascript
浅谈layer的iframe弹窗给里面的标签赋值的问题
2016/11/10 Javascript
jquery submit()不能提交表单的解决方法
2017/04/24 jQuery
vue组件Prop传递数据的实现示例
2017/08/17 Javascript
利用Vue实现一个markdown编辑器实例代码
2019/05/19 Javascript
解决layui的table插件无法多层级获取json数据的问题
2019/09/19 Javascript
[01:53]DOTA2超级联赛专访Zhou 五年职业青春成长
2013/05/29 DOTA
[06:07]辉夜杯现场观众互动 “比谁远送显示器”
2015/12/26 DOTA
[00:59]PWL开团时刻DAY7——我在赶
2020/11/06 DOTA
Python利用Nagios增加微信报警通知的功能
2016/02/18 Python
Python读取sqlite数据库文件的方法分析
2017/08/07 Python
Pytorch 抽取vgg各层并进行定制化处理的方法
2019/08/20 Python
python3.7环境下安装Anaconda的教程图解
2019/09/10 Python
如何利用Python 进行边缘检测
2020/10/14 Python
美国Curacao百货连锁店网站:iCuracao.com
2019/07/20 全球购物
英国领先的在线高尔夫设备零售商:Golfgeardirect
2020/12/11 全球购物
内部类的定义、种类以及优点
2013/10/16 面试题
网游商务专员求职信
2013/10/15 职场文书
交通安全演讲稿
2014/01/07 职场文书
医院标语大全
2014/06/23 职场文书
2014年招生工作总结
2014/11/26 职场文书
学校会议通知范文
2015/04/15 职场文书
色戒观后感
2015/06/12 职场文书
神州牡丹园的导游词
2019/11/20 职场文书