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 相关文章推荐
left join、inner join、right join的区别
Apr 05 MySQL
仅用一句SQL更新整张表的涨跌幅、涨跌率的解决方案
May 06 MySQL
IDEA 链接Mysql数据库并执行查询操作的完整代码
May 20 MySQL
Mysql官方性能测试工具mysqlslap的使用简介
May 21 MySQL
my.ini优化mysql数据库性能的十个参数(推荐)
May 26 MySQL
你知道哪几种MYSQL的连接查询
Jun 03 MySQL
MySQL索引是啥?不懂就问
Jul 21 MySQL
MySQL里面的子查询的基本使用
Aug 02 MySQL
Mysql8.0递归查询的简单用法示例
Aug 04 MySQL
mysql的Buffer Pool存储及原理
Apr 02 MySQL
为什么MySQL不建议使用SELECT *
Apr 03 MySQL
MySQL 字符集 character
May 04 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
2006/12/13 PHP
PHP学习散记_编码(json_encode 中文不显示)
2011/11/10 PHP
PHP错误Allowed memory size of 67108864 bytes exhausted的3种解决办法
2014/07/28 PHP
微信支付PHP SDK ―― 公众号支付代码详解
2016/09/13 PHP
PHP实现二维数组去重功能示例
2017/01/12 PHP
JavaScript 浏览器验证代码(来自discuz)
2010/07/17 Javascript
让元素在网页中可拖动示例代码
2013/08/13 Javascript
禁止选中文字兼容IE、Chrome、FF等
2013/09/04 Javascript
在JS数组特定索引处指定位置插入元素
2014/07/27 Javascript
JavaScript注册时密码强度校验代码
2017/06/30 Javascript
JS+DIV实现拖动效果
2020/02/11 Javascript
es6函数中的作用域实例分析
2020/04/18 Javascript
用Python实现通过哈希算法检测图片重复的教程
2015/04/02 Python
实践Python的爬虫框架Scrapy来抓取豆瓣电影TOP250
2016/01/20 Python
Python连接phoenix的方法示例
2017/09/29 Python
11月编程语言排行榜 Python逆袭C#上升到第4
2017/11/15 Python
Python除法之传统除法、Floor除法及真除法实例详解
2019/05/23 Python
Python使用字典实现的简单记事本功能示例
2019/08/15 Python
python numpy存取文件的方式
2020/04/01 Python
python文件及目录操作代码汇总
2020/07/08 Python
使用OpenCV校准鱼眼镜头的方法
2020/11/26 Python
西班牙伏林航空公司:Vueling
2016/08/05 全球购物
英国领先的野生鸟类食品供应商:GardenBird
2018/08/09 全球购物
Linux如何压缩可执行文件
2013/10/21 面试题
信息技术培训感言
2014/03/06 职场文书
幼儿教师培训感言
2014/03/08 职场文书
党的群众路线教育实践活动个人承诺书
2014/05/22 职场文书
酒后驾车标语
2014/06/30 职场文书
大二学生学年自我鉴定
2014/09/12 职场文书
委托书的写法
2014/09/16 职场文书
监察局领导班子四风问题整改措施思想汇报
2014/10/05 职场文书
2014年基层党支部工作总结
2014/12/04 职场文书
银行大堂经理培训心得体会
2016/01/09 职场文书
远程教育培训心得体会
2016/01/09 职场文书
go:垃圾回收GC触发条件详解
2021/04/24 Golang
MySQL分布式恢复进阶
2022/07/23 MySQL