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 Online DDL的使用详解
May 20 MySQL
mysql外连接与内连接查询的不同之处
Jun 03 MySQL
MySQL 全文检索的使用示例
Jun 07 MySQL
一篇文章看懂MySQL主从复制与读写分离
Nov 07 MySQL
SQL优化老出错,那是你没弄明白MySQL解释计划用法
Nov 27 MySQL
SQL基础查询和LINQ集成化查询
Jan 18 MySQL
解决MySQL添加新用户-ERROR 1045 (28000)的问题
Mar 03 MySQL
mysql 获取时间方式
Mar 20 MySQL
MySQL查询日期时间
May 15 MySQL
MySQL索引失效场景及解决方案
Jul 23 MySQL
分享很少见很有用的SQL功能CORRESPONDING
Aug 05 MySQL
Mysql的Table doesn't exist问题及解决
Dec 24 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 地址栏信息的获取代码
2009/01/07 PHP
PHP中使用foreach和引用导致程序BUG的问题介绍
2012/09/05 PHP
PHP整合PayPal支付
2015/06/11 PHP
PHP实现基于面向对象的mysqli扩展库增删改查操作工具类
2017/07/18 PHP
thinkphp5.1框架模板赋值与变量输出示例
2020/05/25 PHP
JavaScript 替换Html标签实现代码
2009/10/14 Javascript
javascript实现动态模态绑定grid过程代码
2014/09/22 Javascript
jquery果冻抖动效果实现方法
2015/01/15 Javascript
DOM基础教程之使用DOM
2015/01/19 Javascript
jQuery模拟新浪微博首页滚动效果的方法
2015/03/11 Javascript
JavaScript中的acos()方法使用详解
2015/06/14 Javascript
js数组去重的5种算法实现
2015/11/04 Javascript
浅谈jQuery双事件多重加载的问题
2016/10/05 Javascript
javascript跨域请求包装函数与用法示例
2016/11/03 Javascript
ES6 Promise对象概念与用法分析
2017/04/01 Javascript
基于JavaScript实现五子棋游戏
2020/08/26 Javascript
webpack@v4升级踩坑(小结)
2018/10/08 Javascript
微信二次分享报错invalid signature问题及解决方法
2019/04/01 Javascript
详解一次Vue低版本安卓白屏问题的解决过程
2019/05/30 Javascript
python求解水仙花数的方法
2015/05/11 Python
Django模板变量如何传递给外部js调用的方法小结
2017/07/24 Python
Python xlwt设置excel单元格字体及格式
2020/04/18 Python
Anaconda+Pycharm环境下的PyTorch配置方法
2020/03/13 Python
python nohup 实现远程运行不宕机操作
2020/04/16 Python
numpy的Fancy Indexing和array比较详解
2020/06/11 Python
Python里面search()和match()的区别
2016/09/21 面试题
员工工作表扬信范文
2014/01/13 职场文书
自荐书4要点
2014/01/25 职场文书
服务行业口号
2014/06/11 职场文书
小学英语教师2015年度个人工作总结
2015/10/14 职场文书
让人瞬间清醒的句子,句句经典,字字如金
2019/07/08 职场文书
python 统计代码耗时的几种方法分享
2021/04/02 Python
Python爬虫之爬取某文库文档数据
2021/04/21 Python
用PYTHON去计算88键钢琴的琴键频率和音高
2022/04/10 Python
python和C/C++混合编程之使用ctypes调用 C/C++的dll
2022/04/29 Python
win11怎么消除图标小盾牌?win11消除图标小盾牌解决方法
2022/08/05 数码科技