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 05 MySQL
Idea连接MySQL数据库出现中文乱码的问题
Apr 14 MySQL
一文读懂navicat for mysql基础知识
May 31 MySQL
浅谈MySQL 亿级数据分页的优化
Jun 15 MySQL
分析mysql中一条SQL查询语句是如何执行的
Jun 21 MySQL
mysql 直接拷贝data 目录下文件还原数据的实现
Jul 25 MySQL
Mysql数据库中datetime、bigint、timestamp来表示时间选择,谁来存储时间效率最高
Aug 23 MySQL
MySQL中datetime时间字段的四舍五入操作
Oct 05 MySQL
Mysql中有关Datetime和Timestamp的使用总结
Dec 06 MySQL
面试提问mysql一张表到底能存多少数据
Mar 13 MySQL
mysql使用 not int 子查询隐含陷阱
Apr 12 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木马攻击防御之道
2008/03/24 PHP
php5 图片验证码实现代码
2009/12/11 PHP
PHP中输出转义JavaScript代码的实现代码
2011/04/22 PHP
Windows下部署Apache+PHP+MySQL运行环境实战
2012/08/31 PHP
解析PHP对现有搜索引擎的调用
2013/06/25 PHP
ThinkPHP模板判断输出Present标签用法详解
2014/06/30 PHP
C/S和B/S两种架构区别与优缺点分析
2014/10/23 PHP
Yii 2.0实现联表查询加搜索分页的方法示例
2017/08/02 PHP
图片格式的JavaScript和CSS速查手册
2007/08/20 Javascript
Nodejs学习笔记之Global Objects全局对象
2015/01/13 NodeJs
javascript作用域、作用域链(菜鸟必看)
2016/06/16 Javascript
利用bootstrapValidator验证UEditor
2016/09/14 Javascript
JavaScript学习笔记整理_setTimeout的应用
2016/09/19 Javascript
Angular2 路由问题修复详解
2017/03/01 Javascript
Vuex之理解Store的用法
2017/04/19 Javascript
vue axios请求拦截实例代码
2018/03/29 Javascript
js实现网页随机验证码
2020/10/19 Javascript
JavaScript用document.write()输出换行的示例代码
2020/11/26 Javascript
python 获取et和excel的版本号
2009/04/09 Python
python实现数通设备端口监控示例
2014/04/02 Python
浅析python递归函数和河内塔问题
2017/04/18 Python
Python中函数的返回值示例浅析
2019/08/28 Python
使用OpenCV实现仿射变换—旋转功能
2019/08/29 Python
pytorch 修改预训练model实例
2020/01/18 Python
使用python求解二次规划的问题
2020/02/29 Python
Python实现Canny及Hough算法代码实例解析
2020/08/06 Python
pycharm中选中一个单词替换所有重复单词的实现方法
2020/11/17 Python
台湾网友喜爱的综合型网路购物商城:Yahoo! 奇摩购物中心
2018/03/10 全球购物
金融学专业大学生职业生涯规划
2014/03/07 职场文书
研究生考核个人自我鉴定
2014/03/27 职场文书
大学班级计划书
2014/04/29 职场文书
爱护花草树木的标语
2014/06/11 职场文书
电气工程师岗位职责
2015/02/12 职场文书
2016年教师寒假学习心得体会
2015/10/09 职场文书
高考升学宴主持词
2019/06/21 职场文书
Python中的xlrd模块使用整理
2021/06/15 Python