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
教你用eclipse连接mysql数据库
Apr 22 MySQL
MySQL时间设置注意事项的深入总结
May 06 MySQL
使用ORM新增数据在Mysql中的操作步骤
Jul 26 MySQL
MySQL去除重叠时间求时间差和的实现
Aug 23 MySQL
MySQL实例精讲单行函数以及字符数学日期流程控制
Oct 15 MySQL
一次SQL如何查重及去重的实战记录
Mar 13 MySQL
Mysql事务索引知识汇总
Mar 17 MySQL
MySQL限制查询和数据排序介绍
Mar 25 MySQL
MySQL分区以及建索引的方法总结
Apr 13 MySQL
Mysql 文件配置解析介绍
May 06 MySQL
手把手带你彻底卸载MySQL数据库
Jun 14 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
利用谷歌 Translate API制作自己的翻译脚本
2014/06/04 PHP
php生成图片验证码
2015/06/09 PHP
php微信公众号开发之秒杀
2018/10/20 PHP
laravel5.6实现数值转换
2019/10/23 PHP
js 火狐下取本地路径实现思路
2013/04/02 Javascript
js使用递归解析xml
2014/12/12 Javascript
jQuery+HTML5实现手机摇一摇换衣特效
2015/06/05 Javascript
jquery带翻页动画的电子杂志代码分享
2015/08/21 Javascript
基于JS实现类似支付宝支付密码输入框
2016/09/02 Javascript
基于react后端渲染模板引擎noox发布使用
2018/01/11 Javascript
jQuery实现的滑块滑动导航效果示例
2018/06/04 jQuery
ES6中let、const的区别及变量的解构赋值操作方法实例分析
2019/10/15 Javascript
Vue路由权限控制解析
2020/11/09 Javascript
vue 获取url里参数的两种方法小结
2020/11/12 Javascript
JavaScript 防抖和节流遇见的奇怪问题及解决
2020/11/20 Javascript
从零学Python之入门(五)缩进和选择
2014/05/27 Python
Python使用urllib2模块实现断点续传下载的方法
2015/06/17 Python
Django1.9 加载通过ImageField上传的图片方法
2018/05/25 Python
python 基于TCP协议的套接字编程详解
2019/06/29 Python
django admin 自定义替换change页面模板的方法
2019/08/23 Python
Python高级特性——详解多维数组切片(Slice)
2019/11/26 Python
python关闭占用端口方式
2019/12/17 Python
基于Canvas+Vue的弹幕组件的实现
2019/07/23 HTML / CSS
Dr. Martens马汀博士官网:马丁靴始祖品牌
2016/10/15 全球购物
斯凯奇澳大利亚官网:SKECHERS澳大利亚
2018/03/31 全球购物
美国顶级水上运动专业店:Marine Products
2018/04/15 全球购物
奢华的意大利皮革手袋:Bene Handbags
2019/10/29 全球购物
班组长安全职责
2014/01/05 职场文书
幼儿园中秋节活动方案
2014/02/06 职场文书
婚纱摄影师求职信
2014/03/07 职场文书
学生安全责任书模板
2014/07/25 职场文书
有关浪费资源的建议书
2015/09/14 职场文书
五年级数学教学反思
2016/02/16 职场文书
Python使用random模块实现掷骰子游戏的示例代码
2021/04/29 Python
openstack中的rpc远程调用的方法
2021/07/09 Python
Oracle数据库中通用的函数实例详解
2022/03/25 Oracle