关于Mysql分区表的介绍可以参考:

http://blog.csdn.net/jhq0113/article/details/44592865

关于Mysql分区表的创建可以参考:

http://blog.csdn.net/jhq0113/article/details/44593511

前面已经提过,Mysql支持4种表的分区,即RANGE与LIST、HASH与KEY,其中RANGE和LIST类似,按一种区间进行分区,HASH与KEY类似,是按照某种算法对字段进行分区。

RANGE与LIST分区管理:

案例:有一个聊天记录表,用户几千左右,已经对表按照用户进行一定粒度的水平分割,现仍然有部分表存储的记录比较多,于是按照下列方式有对表进行了分区,分区的好处是,可以动态改变分区,删除分区后,数据也一同被删除,如聊天记录只保存两年,那么你就可以按照时间进行分区,定期删除两年前的分区,动态创建新的的分区就能做到很好的数据维护。

分区表创建的语句如下:

[sql] view plain copy  print?
  1. DROP TABLE IF EXISTS `msgss`;
  2. CREATE TABLE `msgss` (
  3. `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT '表主键',
  4. `sender` int(10) unsigned NOT NULL COMMENT '发送者ID',
  5. `reciver` int(10) unsigned NOT NULL COMMENT '接收者ID',
  6. `msg_type` tinyint(3) unsigned NOT NULL COMMENT '消息类型',
  7. `msg` varchar(225) NOT NULL COMMENT '消息内容',
  8. `atime` int(10) unsigned NOT NULL COMMENT '发送时间',
  9. `sub_id` tinyint(3) unsigned NOT NULL COMMENT '部门ID',
  10. PRIMARY KEY (`id`,`atime`,`sub_id`)
  11. ) ENGINE=InnoDB DEFAULT CHARSET=utf8
  12. /*********分区信息**************/
  13. PARTITION BY RANGE (atime) SUBPARTITION BY HASH (sub_id)
  14. (
  15. PARTITION t0 VALUES LESS THAN(1451577600)
  16. (
  17. SUBPARTITION s0,
  18. SUBPARTITION s1,
  19. SUBPARTITION s2,
  20. SUBPARTITION s3,
  21. SUBPARTITION s4,
  22. SUBPARTITION s5
  23. ),
  24. PARTITION t1 VALUES LESS THAN(1483200000)
  25. (
  26. SUBPARTITION s6,
  27. SUBPARTITION s7,
  28. SUBPARTITION s8,
  29. SUBPARTITION s9,
  30. SUBPARTITION s10,
  31. SUBPARTITION s11
  32. ),
  33. PARTITION t2 VALUES LESS THAN MAXVALUE
  34. (
  35. SUBPARTITION s12,
  36. SUBPARTITION s13,
  37. SUBPARTITION s14,
  38. SUBPARTITION s15,
  39. SUBPARTITION s16,
  40. SUBPARTITION s17
  41. )
  42. );

上述语句创建了三个按照RANGE划分的主分区,每个主分区下面有六个按照HASH划分的子分区。

插入测试数据:

[sql] view plain copy  print?
  1. INSERT INTO `msgss`(`sender`,`reciver`,`msg_type`,`msg`,`atime`,`sub_id`) VALUES(1,2,0,'Hello HASH',UNIX_TIMESTAMP(NOW()),1);
  2. INSERT INTO `msgss`(`sender`,`reciver`,`msg_type`,`msg`,`atime`,`sub_id`) VALUES(1,2,0,'Hello HASH 2',UNIX_TIMESTAMP(NOW()),2);
  3. INSERT INTO `msgss`(`sender`,`reciver`,`msg_type`,`msg`,`atime`,`sub_id`) VALUES(1,2,0,'Hello HASH 3',UNIX_TIMESTAMP(NOW()),3);
  4. INSERT INTO `msgss`(`sender`,`reciver`,`msg_type`,`msg`,`atime`,`sub_id`) VALUES(1,2,0,'Hello HASH 10',UNIX_TIMESTAMP(NOW()),10);
  5. INSERT INTO `msgss`(`sender`,`reciver`,`msg_type`,`msg`,`atime`,`sub_id`) VALUES(1,2,0,'Hello HASH 7',UNIX_TIMESTAMP(NOW()),7);
  6. INSERT INTO `msgss`(`sender`,`reciver`,`msg_type`,`msg`,`atime`,`sub_id`) VALUES(1,2,0,'Hello HASH 5',UNIX_TIMESTAMP(NOW()),5);
  7. INSERT INTO `msgss`(`sender`,`reciver`,`msg_type`,`msg`,`atime`,`sub_id`) VALUES(1,2,0,'Hello HASH',1451577607,1);
  8. INSERT INTO `msgss`(`sender`,`reciver`,`msg_type`,`msg`,`atime`,`sub_id`) VALUES(1,2,0,'Hello HASH 2',1451577609,2);
  9. INSERT INTO `msgss`(`sender`,`reciver`,`msg_type`,`msg`,`atime`,`sub_id`) VALUES(1,2,0,'Hello HASH 3',1451577623,3);
  10. INSERT INTO `msgss`(`sender`,`reciver`,`msg_type`,`msg`,`atime`,`sub_id`) VALUES(1,2,0,'Hello HASH 10',1451577654,10);
  11. INSERT INTO `msgss`(`sender`,`reciver`,`msg_type`,`msg`,`atime`,`sub_id`) VALUES(1,2,0,'Hello HASH 7',1451577687,7);
  12. INSERT INTO `msgss`(`sender`,`reciver`,`msg_type`,`msg`,`atime`,`sub_id`) VALUES(1,2,0,'Hello HASH 5',1451577699,5);
  13. INSERT INTO `msgss`(`sender`,`reciver`,`msg_type`,`msg`,`atime`,`sub_id`) VALUES(1,2,0,'Hello HASH',1514736056,1);
  14. INSERT INTO `msgss`(`sender`,`reciver`,`msg_type`,`msg`,`atime`,`sub_id`) VALUES(1,2,0,'Hello HASH 2',1514736066,2);
  15. INSERT INTO `msgss`(`sender`,`reciver`,`msg_type`,`msg`,`atime`,`sub_id`) VALUES(1,2,0,'Hello HASH 3',1514736076,3);
  16. INSERT INTO `msgss`(`sender`,`reciver`,`msg_type`,`msg`,`atime`,`sub_id`) VALUES(1,2,0,'Hello HASH 10',1514736086,10);
  17. INSERT INTO `msgss`(`sender`,`reciver`,`msg_type`,`msg`,`atime`,`sub_id`) VALUES(1,2,0,'Hello HASH 7',1514736089,7);
  18. INSERT INTO `msgss`(`sender`,`reciver`,`msg_type`,`msg`,`atime`,`sub_id`) VALUES(1,2,0,'Hello HASH 5',1514736098,5);

进行分区分析:

EXPLAIN PARTITIONS SELECT * FROM msgss;

可以检测到分区信息如下:

检测分区数据分布:

[sql] view plain copy  print?
  1. EXPLAIN PARTITIONS SELECT * FROM msgss WHERE `atime`<1451577600;
  2. EXPLAIN PARTITIONS SELECT * FROM msgss WHERE `atime`>1451577600 AND `atime`<1483200000;
  3. EXPLAIN PARTITIONS SELECT * FROM msgss WHERE `atime`>1483200000 AND `atime`<1514736000;
  4. EXPLAIN PARTITIONS SELECT * FROM msgss WHERE `atime`>1514736000;

结果:第一条语句只扫描了t0的所有子分区,第二条语句只扫描了t1的所有子分区,第三四条分别只扫描了t2的所有子分区,证明表的分区和数据分布成功。

需求:目前已经是2017年,需要将2015年所有的聊天记录删除,但是保留2016年的聊天记录,并且2017年的数据也能正常按照分区进行存储。

实现以上需求,需要两步,第一步删除t0分区,第二步按照新规则重建分区。

删除分区语句:

ALTER TABLE `msgss` DROP PARTITION t0;

重建分区语句:

[sql] view plain copy  print?
  1. ALTER TABLE `msgss` PARTITION BY RANGE (atime) SUBPARTITION BY HASH (sub_id)
  2. (
  3. PARTITION t0 VALUES LESS THAN(1483200000)
  4. (
  5. SUBPARTITION s0,
  6. SUBPARTITION s1,
  7. SUBPARTITION s2,
  8. SUBPARTITION s3,
  9. SUBPARTITION s4,
  10. SUBPARTITION s5
  11. ),
  12. PARTITION t1 VALUES LESS THAN(1514736000)
  13. (
  14. SUBPARTITION s6,
  15. SUBPARTITION s7,
  16. SUBPARTITION s8,
  17. SUBPARTITION s9,
  18. SUBPARTITION s10,
  19. SUBPARTITION s11
  20. ),
  21. PARTITION t2 VALUES LESS THAN MAXVALUE
  22. (
  23. SUBPARTITION s12,
  24. SUBPARTITION s13,
  25. SUBPARTITION s14,
  26. SUBPARTITION s15,
  27. SUBPARTITION s16,
  28. SUBPARTITION s17
  29. )
  30. );

查询发现,15年的数据全部被删除,剩余的数据被重新分区并分布。

未完。。。。

转载于:https://www.cnblogs.com/duyinqiang/p/5696360.html

数据切分——Mysql分区表的管理与维护相关推荐

  1. 数据切分——Mysql分区表的建立及性能分析

    Mysql的安装方法可以参考: http://blog.csdn.net/jhq0113/article/details/43812895 Mysql分区表的介绍可以参考: http://blog.c ...

  2. MySQL数据库如何管理与维护_mysql数据库的管理与维护

    mysql数据库的管理与维护 云服务器(Elastic Compute Service,简称ECS)是阿里云提供的性能卓越.稳定可靠.弹性扩展的IaaS(Infrastructure as a Ser ...

  3. linux数据软件,Linux数据安全工具:数据镜像软件DRBD的管理与维护

    原标题:Linux数据安全工具:数据镜像软件DRBD的管理与维护 1.启动DRDB (1)在两个节点执行 在启动DRBD之前,需要分别在两台的hdb1分区上创建供DRBD记录信息的数据块.具体是分别在 ...

  4. MySQL数据库如何管理与维护_MySQL安全管理、数据库维护及改善性能

    一.安全管理 1.访问控制 MySQL服务器的安全基础:用户对他们需要的数据有适当的访问权. 访问控制:给用户所需的权限且仅提供所需的访问权.它需要创建和管理用户账号. PS:严肃对待root登陆的使 ...

  5. 数据切分——MySql表分区概述

    定义:        表的分区指根据可以设置为任意大小的规则,跨文件系统分配单个表的多个部分.实际上,表的不同部分在不同的位置被存储为单独的表.用户所选择的.实现数据分割的规则被称为分区函数,这在My ...

  6. 手机版数据库oracle,用手机管理及维护MySQL,Oracle等数据库

    sql server 导出的datetime结果 CAST(0x00009E0E0095524F AS DateTime) 如何向mysql,oracle等数据库进行转换 1. 处理 sql serv ...

  7. 数据切分——Atlas读写分离Mysql集群的搭建

    关于数据切分的原理可以参见博客: http://blog.csdn.net/jhq0113/article/details/44226789 关于Atlas的介绍可以参见博客: http://blog ...

  8. Mysql 扩展性设计之数据切分、那么数据切分后会带来哪些问题呢?比如分布式事务、数据的一致性、垂直切分和水平切分应用场景

    Mysql 扩展性设计之数据切分.那么数据切分后会带来哪些问题呢?比如分布式事务.数据的一致性.垂直切分和水平切分应用场景 前言.什么是数据切分 垂直(纵向)切分.水平(横向)切分.他们各自的特点 垂 ...

  9. Mysql分区表概述、分区类型、分区管理

    另有一篇简单易懂的好文章帮助学习 Mysql分区表的原理和优缺点以及注意点 一.分区概述 分区是指根据一定的规则,数据库把一个表分解成多个更小的.更容易管理的部分.分区有利于管理非常大的表. MySQ ...

最新文章

  1. Java中重写equals()方法时注意点
  2. HDOJ 1298 T9(trie树简单应用)
  3. App Store遭到攻击后如何保护iPhone安全
  4. Jirasearch 2.0狗粮:使用Lucene查找我们的Jira问题
  5. 精通ASP.NET MVC ——模型验证
  6. canal 入门(1)
  7. javacpp-FFmpeg系列之2:通用拉流解码器,支持视频拉流解码并转换为YUV、BGR24或RGB24等图像像素数据...
  8. 有关计算机编程论文,有关计算机程序的论文范文
  9. 从零开始撸一个Fresco之gif和Webp动画
  10. 瀑布模型,快速原型模型,增量模型,螺旋模型以及敏捷开发模型的相关概念
  11. 汉语拼音音节的歧义指数
  12. 论文阅读翻译笔记之Incentives build robustness in BitTorrent
  13. 大数据时代:数据收集比数据挖掘更有意义
  14. 史上最全的app相关的面试题【多测师】
  15. SpringCloud相关jar maven管理工具不能下载(Finchley.M8)
  16. 64位 regsrv win10_有没有 极品飞车9 win10 64位的中文补丁
  17. 国内镜像大全(部分)
  18. 【图像去噪】空域+频域滤波图像去噪【含GUI Matlab源码 914期】
  19. 工信部数字电视标准符合性检测中心发布的
  20. 微信公众号使用Emoji表情

热门文章

  1. Data Member 的存取
  2. 移动端重构系列6——切入切出动画
  3. 算法时间复杂度和空间复杂度表示
  4. 返璞归真的Open×××的p2p模式
  5. c/c++中typedef与函数指针
  6. mysql数据源找不到_mysql报出找不到目标数据源为啥? 同一个方法在其他地方调用正常...
  7. Linux通过kaggle api下载kaggle数据集
  8. 【Python-ML】SKlearn库RANSAC拟合高鲁棒性回归模型
  9. build FLTK 1.1.7 with gcc 2.95.3 on Fedora7
  10. ubuntu 10.04源 更新源列表